実は 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 件のコメント:
コメントを投稿