実は foreach を for と書き変えても全く同じ動作をしてくれます。
例) 下記のコードは全く同じ処理
foreach my $var (@vars) {
print $var;
}
for my $var (@vars) {
print $var;
}
foreach は for のエイリアスなので、どちらを使ってもOKです。
perldoc にもある通り、読みやすさのために foreach、簡潔さのために for な感じでしょうか。
http://perldoc.jp/docs/perl/5.8.8/perlsyn.pod (Foreach Loops for foreach)
一応ベンチマークを取ってみました。(ついでに個人的によく使う map も)
ベンチマークコードです。
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw/cmpthese timethese/;
cmpthese timethese(10000, {
'foreach' => sub { foreach (1 .. 10000) {} },
'for' => sub { for (1 .. 10000) {} },
'map' => sub { map {;} (1 .. 10000) },
});
そして実行結果。
Benchmark: timing 10000 iterations of for, foreach, map...
for: 6 wallclock secs ( 6.07 usr + 0.00 sys = 6.07 CPU) @ 1647.45/s (n=10000)
foreach: 6 wallclock secs ( 6.14 usr + 0.00 sys = 6.14 CPU) @ 1628.66/s (n=10000)
map: 8 wallclock secs ( 7.52 usr + 0.01 sys = 7.53 CPU) @ 1328.02/s (n=10000)
Rate map foreach for
map 1328/s -- -18% -19%
foreach 1629/s 23% -- -1%
for 1647/s 24% 1% --
foreach と for は速度的にもほとんど同じですね。(map は遅いなぁ)
0 件のコメント:
コメントを投稿