map EXPR,LIST
Prilygina BLOCK arba EXPR kiekvienam LIST elementui (lokaliai nustatydamas $_
kiekvienam elementui) ir gražina sąrašo reikšmę kiekvienam tokiam prilyginimui. Skaliariniame kontekste, gražina viso sugeneruotų elementų skaičių. Prilygina BLOCK arba EXPR sąrašo kontekste, taigi kiekvienas LIST elementas gali duoti 0, 1 arba daugiau elementų gražinamoje reikšmėje.
@chars = map(chr, @nums);
verčia skaičių sąrašą į atitinkamus simbolius. O
%hash = map { getkey($_) => $_ } @array;
yra tiesiog smagus būdas, norint užrašyti
%hash = ();
foreach $_ (@array) {
$hash{getkey($_)} = $_;
}
Pažymėtina, kad $_
yra alias'as sąrašo reikšmei, taigi jis gali būti naudojamas pakeisti LIST elementus. Nors tia yra naudinga ir palaikoma, gali sukelti keistus rezultatus, jei LIST elementai nėra kintamieji. Naudojant paprastą foreach
ciklą tam reikalui, būtų daug aiškiau daugumoj atvejų. Taip pat žr. grep masyvui, masyvui, sudarytam iš originalaus sąrašo, kuriame BLOCK arba EXPR prisilygino true elementams.
{
pradeda hash nuorodas ir blokus, taigi
map { ...
galėtų būti arba map BLOCK
LIST arba map EXPR, LIST pradžia. Kadangi perlas nežiūri tolyn ir neieško uždaromojo }
, jis turi spėti su kuriuo atveju susidūrė priklausomai nuo to, ką randa iškart po {
. Dažniausia jis atspėja, bet jei ne, tuomet to ir nesupras, kol neatsitrenks į }
ir pastebės trūkstamą (arba nesitikėtą) kablelį. Tokiu atveju bus raportuojams sintaksės klaidos netoli }
, bet reikės ką nors pakeisti greta {
kaip kad panaudoti unarinį +
, kad pagelbėtume perlui:
%hash = map { "\L$_", 1 } @array # perl spėja, kad tai EXPR. blogai
%hash = map { +"\L$_", 1 } @array # perl spėja kad tai BLOCK. gerai
%hash = map { ("\L$_", 1) } @array # irgi veikia
%hash = map { lc($_), 1 } @array # ir čia.
%hash = map +( lc($_), 1 ), @array # tai EXPR ir jis veikia
%hash = map ( lc($_), 1 ), @array # prilygina (1, @array)
arba priversti greitą hash'o konstruktorių panaudoti +{
@hashes = map +{ lc($_), 1 }, @array # EXPR, taigi reikia , pabaigoje
ir gausite anoniminių hash'ų sąrašą, kuriame visus bus tik po vieną įrašą.