いくつかの選択肢のベンチマークを見てみましょう。
use Modern::Perl;
use Benchmark qw'cmpthese';
# set up some test data
my $bar = join "\n", 'a'..'z';
my $qr = qr/\r?\n/;
my $str = "\r?\n";
my $qq = qq/\r?\n/;
my %test = (
' //' => sub{ split( /\r?\n/, $bar ); },
' m//' => sub{ split( m/\r?\n/, $bar ); },
' m""' => sub{ split( m"\r?\n", $bar ); },
' qr//' => sub{ split( qr/\r?\n/, $bar ); },
' qq//' => sub{ split( qq/\r?\n/, $bar ); },
' ""' => sub{ split( "\r?\n", $bar ); },
'$qr ' => sub{ split( $qr, $bar ); },
'$str ' => sub{ split( $str, $bar ); },
'$qq ' => sub{ split( $qq, $bar ); }
);
cmpthese( -5, \%test, 'auto');
ベンチマーク:実行中
""、//、m ""、m //、qq //、qr //、$ qq、$ qr、$ str
少なくとも5CPU秒の間..
"":6ウォールクロック秒(5.21 usr + 0.02 sys = 5.23 CPU)@ 42325.81 / s(n = 221364)
//:6ウォールクロック秒(5.26 usr + 0.00 sys = 5.26 CPU)@ 42626.24 / s(n = 224214)
m "":6ウォールクロック秒(5.30 usr + 0.01 sys = 5.31 CPU)@ 42519.96 / s(n = 225781)
m //:6ウォールクロック秒(5.20 usr + 0.00 sys = 5.20 CPU)@ 42568.08 / s(n = 221354)
qq //:6ウォールクロック秒(5.24 usr + 0.01 sys = 5.25 CPU)@ 42707.43 / s(n = 224214)
qr //:6ウォールクロック秒(5.11 usr + 0.03 sys = 5.14 CPU)@ 33277.04 / s(n = 171044)
$ qq:5ウォールクロック秒(5.15 usr + 0.00 sys = 5.15 CPU)@ 42154.76 / s(n = 217097)
$ qr:4ウォールクロック秒(5.28 usr + 0.00 sys = 5.28 CPU)@ 39593.94 / s(n = 209056)
$ str:6ウォールクロック秒(5.29 usr + 0.00 sys = 5.29 CPU)@ 41843.86 / s(n = 221354)
レートqr//$ qr $ str $ qq "" m "" m // // qq //
qr // 33277 / s---16%-20%-21%-21%-22%-22%-22%-22%
$ qr 39594 / s 19%---5%-6%-6%-7%-7%-7%-7%
$ str 41844 / s 26%6%---1%-1%-2%-2%-2%-2%
$ qq 42155 / s 27%6%1%---0%-1%-1%-1%-1%
"" 42326 / s 27%7%1%0%---0%-1%-1%-1%
m "" 42520 / s 28%7%2%1%0%---0%-0%-0%
m // 42568 / s 28%8%2%1%1%0%---0%-0%
// 42626 / s 28%8%2%1%1%0%0%---0%
qq // 42707 / s 28%8%2%1%1%0%0%0%-
これらはすべて基本的に同じ速度であり、qr//
わずかに遅いことが示されていることに注意してください。このテストを数回実行した後、qr//
常に$qr
最も遅く、2番目に遅いものでした。他の人と定期的に場所を交換します。
したがって、基本的には、の正規表現をどのように設定するかは重要ではありません split()
。