ファイルの読みこみをする方法がいろいろあるみたいで、ちょっと気になってベンチマークをとってみました。
use Benchmark;
local $file = "bench.perl";
my $retry = 10000;
timethese(
$retry,
{
test1 => '&func1()',
test2 => '&func2()',
test3 => '&func3()'
}
);
sub func1()
{
open(IN, $file);
$array .= $_ while(<IN>);
close IN;
#print $array;
}
sub func2(){
open(IN, $file);
$array = do{local $/ = undef; <IN>};
close IN;
#print $array;
}
sub func3(){
open(IN, $file);
@stat = stat($file);
read(IN, $array, $stat[7]);
close IN;
#print $array;
}E:\work\perl\mixi>perl bench.perl
Benchmark: timing 10000 iterations of test1, test2, test3...
test1: 20 wallclock secs ( 8.84 usr + 8.42 sys = 17.27 CPU) @ 579.21/s (n=10000)
test2: 6 wallclock secs ( 1.69 usr + 2.47 sys = 4.16 CPU) @ 2406.16/s (n=10000)
test3: 12 wallclock secs ( 3.03 usr + 6.28 sys = 9.31 CPU) @ 1073.88/s (n=10000)