速度低下
http://hatena.g.hatena.ne.jp/hatenatech/20051125/1133147961
↑ここを見させて頂いていたら、↓下記の一文を発見。
大西注
perlvarによると
Due to an unfortunate accident of Perl’s implementation, "use English" imposes a considerable performance penalty on all regu-lar expression matches in a program, regardless of whether they occur in the scope of "use English".
Perl の実装における不幸な事故により、 use English はプログラム中の全ての正規表現マッチングにおいてかなりの性能低下を引き起こします。これは use English のスコープ内かどうかに関わりません。この理由により、ライブラリで use English を使うのはできるだけ避けてください。
って書いてあるYO!
そこで、下記のような試験用のスクリプトを書いて実験してみました。
use strict; use warnings; use Readonly; #use English qw( -no_match_vars ); #use English; Readonly my $REG_COM => q{http://[^/]+??.com/}; my @targets; MAKE_TARGET: for ( 1..5000000 ) { my $target = q{http://}; $target .= {}; $target .= int( rand(2) ) ? q{.com/} : q{.jp/}; push @targets, $target; } my $start_time = (times)[0]; MATCH_TARGET: for (@targets) { m{$REG_COM}; } my $time = (times)[0] - $start_time; print "sec:$time?n";
use English; とすると、確かに遅くなりました。
んが、use English qw( -no_match_vars ); とすると、何も use しない時と速度に違いはありませんでした。(毎回、多少の誤差はありましたが)
ん〜、テストスクリプトが悪いかも(w;
実際に use English qw( -no_match_vars ); を仕事で使ってみて、速度低下が起こったら、また補足します。