ベンチマークしたことがなかったのでやってみた。配列要素を一個ずつインクリメントする時、foreachとmapでどっちが速いんだろうなーっと。
use Benchmark; my @array = 1..10000; timethese(10000 , { 'foreach' => sub { $_++ foreach @array; } , 'map' => sub { map { $_++ } @array;} });
Benchmark: timing 10000 iterations of for, map... foreach: 13 wallclock secs (13.40 usr + 0.03 sys = 13.43 CPU) @ 744.60/s (n=10000) map: 30 wallclock secs (29.86 usr + 0.06 sys = 29.92 CPU) @ 334.22/s (n=10000) Benchmark: timing 10000 iterations of for, map... foreach: 13 wallclock secs (13.38 usr + 0.02 sys = 13.40 CPU) @ 746.27/s (n=10000) map: 30 wallclock secs (29.23 usr + 0.04 sys = 29.27 CPU) @ 341.65/s (n=10000) Benchmark: timing 10000 iterations of for, map... foreach: 15 wallclock secs (14.18 usr + 0.03 sys = 14.21 CPU) @ 703.73/s (n=10000) map: 32 wallclock secs (31.60 usr + 0.06 sys = 31.66 CPU) @ 315.86/s (n=10000)
結果はこんなん。foreachで回した方が2倍速い。へぇー
昨今のパソコンは超高速過ぎるCPUを積んでいるので、短いスクリプトの場合は速度が速いとか遅いとかよく分かりません。でっかいデータを扱ったらコーディングで速度に差が出るんだろうけどね。
なのでこうやって数値化された速度がバキッと出てくるのを見ると楽しいです。あー やっぱり理系だな、おいら。実験楽しい。