- 论坛徽章:
- 1
|
总结了下大家的建议,pack效率虽然不错,但是还是没能超过tr,测试代码及结果如下:
use 5.014;
use Benchmark qw(timethese);
timethese(-2, {
'tr' => sub {
my $str = "10101010101010"x10;
my $times = $str=~ tr/1/0/;
return $times;
},
'replace' => sub {
my $str = "10101010101010"x10;
my $times = $str =~ s/1/0/g;
return $times;
},
'while'=>sub{
my $str = "10101010101010"x10;
my $times =0;
$times++ while $str =~/1/g;
return $times;
},
'chop'=>sub{
my $str = "10101010101010"x10;
my $times =0;
while($str)
{
$times++ if chop $str;
}
return $times;
},
'pack'=>sub{
my $str = "10101010101010"x10;
return unpack("%B*",pack("B*",$str));
},
}
);
##结果
Benchmark: running chop, pack, replace, tr, while for at least 2 CPU seconds...
chop: 2 wallclock secs ( 2.12 usr + 0.00 sys = 2.12 CPU) @ 66080.15/s (n=140156)
pack: 3 wallclock secs ( 2.09 usr + 0.00 sys = 2.09 CPU) @ 757637.32/s (n=1583462)
replace: 2 wallclock secs ( 2.15 usr + 0.00 sys = 2.15 CPU) @ 34983.74/s (n=75320)
tr: 2 wallclock secs ( 2.17 usr + 0.00 sys = 2.17 CPU) @ 1224101.01/s (n=2653851)
while: 2 wallclock secs ( 2.17 usr + 0.00 sys = 2.17 CPU) @ 86977.40/s (n=188567)
|
|