tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

map を使おう

仕事メモ。map の使い方で初心者っぽいハマり方をしたので。

my @aaa = qw( key1 key2 key3 );

こんな感じの配列から、「key」を除いて、(1, 2, 3)みたいなリストが欲しいとします。

で、

my @aaa = qw( key1 key2 key3 );
@aaa = map { s/^key// } @aaa; #これじゃダメ
print "(" .  join (", ", @aaa) . ")\n";

こんな感じのを作ってみると...

tsucchi@over[11]% perl a.pl
(1, 1, 1)

あれ???なんでやねん???

と、小一時間悩んだ。(いや、悩んだのは10分くらいかも)

正解は、

@aaa = map { s/^key//; $_ } @aaa;

$_ を評価するのがポイントだよね。置換演算子の戻り値は置換した回数が返る。なので最初のやり方では駄目だったわけです。

で、これを実行すると、

tsucchi@over[13]% perl a.pl
(1, 2, 3)

と無事に変更できましたとさ。