正規表現ベンチ
http://www.ketan.jp/diary/
ベンチマークの目的は、ちゃんと良いエンジンを持ってるかどうかだと思うのだけど、どう考えてもPerlさんが苦手なloopによる文字列生成に時間がかかっているので、書きなおしてあげるべきだと思った。
use strict; my $query = "b" x (1024*1024) . "x"; if ($query =~ /^b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b$/) { print "yes\n"; } else { print "no\n"; } __END__
実行時間は
real 0m0.008s user 0m0.004s sys 0m0.004s
元のだと、
real 0m0.272s user 0m0.268s sys 0m0.000s
うわぁ・・・・・
正規表現で、オートマトンをたどる時間よりも遅いんすか・・・ループって。
試しに、こんなのもやってみた。
use strict; for (my $i = 0; $i < 1024*1024; ++$i) { } my $query = "b" x (1024*1024) . 'x'; if ($query =~ /^b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b$/) { print "yes\n"; } else { print "no\n"; }
real 0m0.107s user 0m0.100s sys 0m0.008s
うわあ・・・・・・