ログコンバータ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の使いわけについて」によると。mapforeachよりも遅いそうです。ま、いいや。Perlやってると〜期って結構あるし。map期とか型グロブ期とかOOP期とかクロージャ期とか。

もっと追記

mapは遅いのか - 北海道苫小牧市出身の初老PGが書くブログ」を参考にベンチマークとってみると、mapって遅い。やっぱりforeachに戻しておこう。そこまでタイムクリティカルなコードを書いているわけじゃないけど、やっぱり気になるし。