在这两个版本的 perl(5.8.8 和 5.16.2)上运行以下脚本表明 5.16.2 比使用正则表达式操作的 5.8.8 慢。为什么呢 ?而且,有没有办法可以加快速度?
use Time::HiRes 'time';
for my $regex (
q{^a$|^b$},
q{^(a|b)$},
q{(a|b)},
q{^a$|^b$|^c$|^d$|^e$|^f$},
q{^(a|b|c|d|e|f)$},
q{a|b|c|d|e|f},
) {
my $start = time();
for my $i (1 .. 100_000) {
'SOMEBIGSTRINGHERE' =~ m{$regex};
}
my $runtime = time() - $start;
printf("%50s: %f\n", $regex, $runtime);
}
使用 perl 5.8.8 -
^a$|^b$: 0.101017
^(a|b)$: 0.017527
(a|b): 0.107669
^a$|^b$|^c$|^d$|^e$|^f$: 0.163687
^(a|b|c|d|e|f)$: 0.022244
a|b|c|d|e|f: 0.171675
使用 perl 5.16.2 -
^a$|^b$: 0.254984
^(a|b)$: 0.031507
(a|b): 0.045713
^a$|^b$|^c$|^d$|^e$|^f$: 0.443303
^(a|b|c|d|e|f)$: 0.031506
a|b|c|d|e|f: 0.043478