map BLOCK LIST
map EXPR,LIST

針對 LIST 的每個元素評估 BLOCK 或 EXPR(將 $_ 本地設定為每個元素),並組成一個由每個此類評估結果組成的清單。LIST 的每個元素可能會在產生的清單中產生零、一或多個元素,因此產生的清單中的元素數量可能與 LIST 中的不同。在純量內容中,傳回如此產生的元素總數。在清單內容中,傳回產生的清單。

my @chars = map(chr, @numbers);

將數字清單轉換為對應字元。

my @squares = map { $_ * $_ } @numbers;

將數字清單轉換為其平方值。

my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;

顯示傳回元素的數量可能與輸入元素的數量不同。若要略過元素,請傳回空清單 ()。也可以透過撰寫以下程式碼來達成:

my @squares = map { $_ * $_ } grep { $_ > 5 } @numbers;

這讓意圖更為明確。

Map 永遠傳回清單,可以指派給雜湊,讓元素變成鍵值配對。請參閱 perldata 以取得更多詳細資料。

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

只是寫作的一種有趣方式

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

請注意,$_ 是對清單值的別名,因此可用來修改 LIST 的元素。雖然這是有用的且受支援的,但如果 LIST 的元素不是變數,可能會導致奇異的結果。在這種情況下,使用常規的 foreach 迴圈會更清楚。另請參閱 grep,以取得原始清單中那些 BLOCK 或 EXPR 評估為 true 的項目的清單。

{ 同時啟動雜湊參照和區塊,因此 map { ... 可以是 map BLOCK LIST 或 map EXPR, LIST 的開頭。由於 Perl 沒有向前尋找關閉的 },因此它必須根據 { 之後發現的內容猜測它正在處理什麼。通常它會做對,但如果沒有,它不會意識到有什麼問題,直到它到達 } 並遇到遺失的(或意外的)逗號。語法錯誤將會報告在接近 } 的地方,但您需要在 { 附近更改一些東西,例如使用一元 + 或分號來提供 Perl 一些幫助

my %hash = map {  "\L$_" => 1  } @array # perl guesses EXPR. wrong
my %hash = map { +"\L$_" => 1  } @array # perl guesses BLOCK. right
my %hash = map {; "\L$_" => 1  } @array # this also works
my %hash = map { ("\L$_" => 1) } @array # as does this
my %hash = map {  lc($_) => 1  } @array # and this.
my %hash = map +( lc($_) => 1 ), @array # this is EXPR and works!

my %hash = map  ( lc($_), 1 ),   @array # evaluates to (1, @array)

或強制使用匿名雜湊建構函式 +{

my @hashes = map +{ lc($_) => 1 }, @array # EXPR, so needs
                                          # comma at end

以取得一個匿名雜湊清單,每個雜湊只有一個條目。