Perl笔记

来自Jack's Lab
2014年12月25日 (四) 13:38Comcat (讨论 | 贡献)的版本

跳转到: 导航, 搜索

目录

1 Catalyst 安装

$ apt-get install perl perl-modules libcatalyst-perl libcatalyst-modules-perl



2 32位位反转

$ cat bit-rev.pl
#!/usr/bin/perl

sub rev
{
    my $in = shift;
    $in = ($in & 0x55555555) << 1 | ($in & 0xaaaaaaaa) >> 1;
    $in = ($in & 0x33333333) << 2 | ($in & 0xCCCCCCCC) >> 2;
    $in = ($in & 0x0f0f0f0f) << 4 | ($in & 0xf0f0f0f0) >> 4;
    $in = ($in & 0x00ff00ff) << 8 | ($in & 0xff00ff00) >> 8;
    $in = ($in & 0x0000ffff) << 16 | ($in & 0xffff0000) >> 16;
    return $in;
}

my $d = 0x80008001;
printf "d = 0x%08x\n", $d;
printf "rd = 0x%08x\n", &rev($d);

$ ./bit-rev.pl
d = 0x80008001
rd = 0x80010001



3 进制转换

For bash:

# for bash. your shell is probably different.

alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"

alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"

alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"



4 字符整数转换

# for bash. your shell is probably different.

alias d2c="perl -e 'printf qq|%s\n|, chr( shift )'"
alias h2c="perl -e 'printf qq|%s\n|, chr(hex shift )'"

alias c2d="perl -e 'printf qq|%u\n|, ord( shift )'"
alias c2h="perl -e 'printf qq|0x%x\n|, ord( shift )'"

---

comcat@jackslab $ d2c 97
a
comcat@jackslab $ c2d b
98
comcat@jackslab $ h2c 61
a
comcat@jackslab $ h2c 0x61
a
comcat@jackslab $ c2h a
0x61
comcat@jackslab $ c2h b
0x62



5 十六进制字符串

$ cat test.pl
#!/usr/bin/perl
my $seed = 0x52536264;
print "seed = " . $seed . "\n";
printf "seed = 0x%x\n", $seed;

# bit revert
$seed = &rev($seed);
printf "seed bit revert = 0x%x\n", $seed;

my $id = sprintf("0x%08x", $seed);

printf "id = %s\n", $id;
printf "decode id = 0x%x\n", &rev(hex $id);

$ ./test.pl
seed = 1381196388
seed = 0x52536264
seed bit revert = 0x2646ca4a
id = 0x2646ca4a
decode id = 0x52536264



6 vec

$ cat test.pl
#!/usr/bin/perl
my $seed = 0x52546264;
my $id = sprintf("%08x", $seed);

printf "id = %s\n", $id;
printf "vec(id, 2, 8) = %u\n", vec($id, 2, 8);
printf "vec(id, 2, 8) = %s\n", chr(vec($id, 2, 8));

$ ./test.pl
id = 52546264
vec(id, 2, 8) = 53
vec(id, 2, 8) = 5

vec 将字符串 "52546264",8位一个单位,从0开始标号,最左8位为0,其次为1。序号2对应的8位值为 53,此为字符 '5' 的 ASCII 码值



7 Resource































个人工具
名字空间

变换
操作
导航
工具箱