[Tokyo-pm] これはどう動くの?
Shinya Hayakawa
tetryl @ tokyoprogrammer.com
2004年 8月 26日 (木) 08:53:48 CDT
こんにちは。早川です。
-- 管理者様すみません。。再送です
せっかくなのでベンチマーク取ってみました。
use strict;
use Benchmark;
my $fname = 'ls-lR.txt';
timethese( -3,
{ normal => sub {
local $/ = "";
open my $fh, $fname or die;
my %lslr = map {sub {substr(shift,0,-1), \@_}->(split /\n/)} <$fh>;
}
, redundant => sub {
local $/ = "";
open my $fh, $fname or die;
my %lslr = ();
for (<$fh>) {
my @lines = split /\n/;
my $head = substr(shift @lines, 0, -1);
$lslr{$head} = \@lines;
}
}
} );
Benchmark: running normal, redundant for at least 3 CPU seconds...
normal: 4 wallclock secs ( 3.06 usr + 0.11 sys = 3.17 CPU) @ 2943.53/s
(n=9331)
redundant: 4 wallclock secs ( 3.17 usr + 0.09 sys = 3.26 CPU) @ 2512.27/s
(n=8190)
1行が6行になったからといって
それほど冗長さは感じられませんが (^^;
前者の方が効率はいいみたいですね。
はじめはsubstrが無くて以下のようなコードだったのですが
これは見た目的に、とても美しいと感じました。
%lslr = map {sub {shift, \@_}->(split /\n/)} <$fh>;
なにはさておき、このようなコードを可能にした
$/変数は素晴らしいと思います。
--
Shinya Hayakawa
hayakawa at livedoor.jp
Tokyo-pm メーリングリストの案内