frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

リファレンス、またがんばる。

リファレンスちゃんに、再びがんばっていただきましょう。

さぁさぁ、汚名返上(?)しちゃってやってください。

main

#/usr/bin/perl -w

use 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 するのって、比較的重い作業なのかな?