ログコンバータ6話
foreach
を等価なmap
で置き換え。map
関数ってあまり使ったことがないから、perldocを読みながら。ホントはforeach
のままでいいんだけど、これも勉強。
$_ = encode($output_charset_legacy, $_) foreach ($name, $mail, $message, $date);
から、
map {$_ = encode($output_charset_legacy, $_)} $name, $mail, $message, $date;
に変更。無効コンテキストで使うのもどうかなと思うけど。戻り値をきちんと扱うなら、
($name, $mail, $message, $date) = map {encode($output_charset_legacy, $_)} $name, $mail, $message, $date;
なのかな。これなら無効コンテキストで呼んだほうがいいかな。
あと、定数をcostant
プラグマからReadonly.pm
に変更、ってもう書いたかな? $_
を使うように書き換えた場所も多数。読みやすさが大して変わらないなら、余分に変数を使ってしまうよりも、$_
で済ませたほうがいいかな、と。
追記
「foreachとmapの使いわけについて」によると。map
はforeach
よりも遅いそうです。ま、いいや。Perlやってると〜期って結構あるし。map
期とか型グロブ期とかOOP期とかクロージャ期とか。
もっと追記
「mapは遅いのか - 北海道苫小牧市出身の初老PGが書くブログ」を参考にベンチマークとってみると、map
って遅い。やっぱりforeach
に戻しておこう。そこまでタイムクリティカルなコードを書いているわけじゃないけど、やっぱり気になるし。