
295
16.4 map を使ってリストの要素を変換する
my $line_count = grep /\bfred\b/i, <$fh>;
16.4
map
を使ってリストの要素を変換する
フィルタするのではなく、リストのすべての要素に変更を加えたいこともあります。例えば、
(
14
章で定義した)サブルーチン
big_money
を使って、数値のリストを「金額表示」に変換するこ
とを考えましょう。しかし元のデータは変更したくありません。出力に使うだけの目的で、リスト
を変換したコピーが欲しいのです。これを実現するやり方の
1
つを次に示します。
my @data = (4.75, 1.5, 2, 1234, 6.9456, 12345678.9, 29.95);
my @formatted_data;
foreach (@data) {
push @formatted_data, big_money($_);
}
ところでこれは、
1
つ前の
grep
の節の冒頭でお見せしたコードと似ていますね。ですから、書
き換えたコードが、先ほどの
grep
のコードと似ていたとしても、何ら不思議ではありません。
my @data = (4.75, 1.5, 2, 1234, 6.9456, 12345678.9, 29.95);
my @formatted_data = map { big_money($_) } @data;
map
演算子は
grep
にとてもよく似ていて、同じような引数
─
$_
を使うブロックと処理すべき
要素のリスト
─
を受け取ります ...