リファレンス、またがんばる。
リファレンスちゃんに、再びがんばっていただきましょう。
さぁさぁ、汚名返上(?)しちゃってやってください。
main
#/usr/bin/perl -wuse strict;
use Time::HiRes;
my $checkTimes = $ARGV[1] =~ /^[0-9]+$/ ? $ARGV[1] : 100;
my %BOOLEAN = (
'TRUE' => 1,
'FALSE' => 0
);
my $timecheck = Time::HiRes::time;
my $allData =<<_EOT_;
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
testtesttesttesttesttesttesttesttesttest
_EOT_
実験パターン・呼び出し側
print Time::HiRes::time - $timecheck."\n";
exit;
実験パターン・呼び出され側
パターン1
呼び出し側
for (1..$checkTimes) {
&checkString(\$allData);
}
呼び出され側
sub checkString(\$) {
my $allData = shift;
return ($$allData =~ /test/) ? $BOOLEAN{TRUE} : $BOOLEAN{FALSE};
}
パターン2
呼び出し側
for (1..$checkTimes) {
&checkString($allData);
}
呼び出され側
sub checkString($) {
my $allData = shift;
return ($allData =~ /test/) ? $BOOLEAN{TRUE} : $BOOLEAN{FALSE};
}
これを$checkTimesを100にして
交互に呼び出すのを100回やって平均値を出したら…
■パターン1
0.000261116
■パターン2
0.000289822
…これも結果、予想通り、パターン1が
0.0000287056 速かったのでした。
もっと大差あるかと思ってたけど
そうでもないんだなぁ。
さっきの「リファレンスがんばる。」の実験だと
パターン2の方だけ、return してたから
あんだけ大きな差になったのかな???
return するのって、比較的重い作業なのかな?