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の「配列」についての解説は以下をご覧ください。
Perlゼミ

