map関数 - 配列のすべての要素の変換
配列のすべての要素を変換するにはmap関数を使用します。@arrayの各要素がデフォルト変数$_に渡されてきますので、コードブロック{ }の中で必要な変換を行います。変換文で最後に評価されたものが@mappedに順番に追加されます。
# 配列のすべての要素の変換 @mapped = map { 変換文 } @array;
サンプル
mapを使ってすべての要素を2倍するサンプルです。@numsが(1, 2, 3)の場合は@doubledは(2, 4, 6)になります。
# すべての要素を2倍 my @nums = (1, 2, 3); my @doubled = map { $_ * 2 } @nums;
mapを使ってすべての要素の先頭の文字列を削除するサンプルです。@strsが(' a', ' b', ' c')の場合は@trimedは('a', 'b', 'c')になります。
# 先頭の空白を除く my @strs = (' a', ' b', ' c'); my @trimed = map { $_ =~ s/^\s+//; $_ } @strs;
ひとつの要素をふたつの要素に変換することもできます。@keysが('a', 'b', 'c')の場合は%mappedは(a => 1, b => 1, c => 1)になります。
# ふたつの要素に変換 my @keys = ('a', 'b', 'c'); my %mapped = map { $_ => 1 } @keys;
mapで書くことができるものはforeach文でも書くことができます。mapのほうが簡潔に記述できるのでPerlではよく利用されます。
# for my @nums = (1, 2, 3); my @doubled; for my $num (@nums) { push @doubled, $num * 2; }
参考「Perlの配列」
Perlの「配列」についての解説は以下をご覧ください。