mapによるリストの変換

mapのイメージって入力リストの要素数=出力リストの要素数だったのだけれど,別に制限がないらしい.例えば配列からハッシュをつくるときにこんなことだってできる.

my %hash = map {$_, $_ * $_} @input_numbers;

これは,入力リストの要素をキー,それぞれの二乗値を値にしたハッシュを作成している.他にもこんなことも可能

my @input_numbers = (1, 2, 4, 8, 16, 32, 64);
my @result = map {split //, $_ } @input_numbers;

これは全ての桁をばらばらにしたリストを生成する.16,32,64が1,6,3,2,6,4に分解される.この例でわかるとおり,mapで返す配列の大きさは要素ごとに異なっていてもいい.
これはかなり便利.mapやgrepでやることはforeach文で表現可能だけれど,こっちの方が楽.


(続・初めてのPerl第2版より)
第1版持っていたからいいや,と思っていたらけっこうボリュームUPしている.grmap, grepの解説も追加されているし,タイトル変更のとおり,「続」という感じがする.買いでっせ
追記:ほしマーク(*の全角版みたいなの)もhatena-modeからupすると文字化けするみたい.面倒くさいなぁ...