これら 2 つのバージョンの 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