Perl5 リファレンス



map

【文法】

map BLOCK LIST
map EXPR,LIST


【説明】

BLOCK や EXPR を、(局所的に、$_ を各要素にセットした)LIST の各要素に対して評価
します。そして、各評価の結果からなるリストの値を返します。スカラーコンテキストで
は、生成された要素数の合計を返します。
リストコンテキスト内の BLOCK や EXPR を評価し、LIST の各要素は、返値に 0, 1 また
はそれ以上の良いうそを生成するでしょう。

    @chars = map(chr, @nums);

は、数字のリストをそれぞれに一致する文字に変換します。そして、

    %hash = map { getkey($_) => $_ } @array;

は、まさに以下の通りのコードと同じことするおもしろい方法です。

    %hash = ();
    foreach $_ (@array) {
        $hash{getkey($_)} = $_;
    }

$_ はリストの値へのリファレンスですから、grep 関数で配列の要素を変更することがで
きます。これは便利でサポートされている一方、LIST が名無し配列の場合には、怪奇な
結果を引き起こす可能性があります。foreach ループをこの目的で使うと、ほとんどのケ
ースでこれが明らかになります。

【例】

@nums = (97, 98, 99, 100);
foreach $key (map {$_ += 1;} @nums) {
    print "$key\n";
}

この場合、配列 @nums ないの各要素に 1 を加えて、表示します。しかし、map 関数内
で $_ += 1; が実行されていますので、オリジナルの @nums の各要素も変更されてしま
います。このスクリプトを実行した後、@nums の各要素は 98, 99, 100, 101 となってし
まいます。$_ を使う場合には、注意が必要です。



Perl5リファレンスに戻る