Valuta il BLOCCO o l'ESPR per ogni elemento
della lista (assegnando localmente a $_ ogni elemento)
e restituisce la lista di valori costituita dai
risultati di ciascuna di queste valutazioni. In un
contesto scalare, restituisce il numero il numero totale
degli elementi così generati. Valuta
il BLOCCO o l'ESPR in un contesto di lista, in
maniera tale che ciascuno degli elementi della LISTA
può produrre zero, uno o più elementi
nel valore restituito.
@caratteri = map(chr, @numeri);
traduce una lista di numeri nei corrispondenti caratteri. E
%hash = map { getkey($_) => $_ } @array;
è solo un modo divertente per scrivere:
%hash = ();
foreach $_ (@array) {
$hash{getkey($_)} = $_;
}
Va notato che $_ è un alias del valore
dell'elemento della lista, quindi può essere
usato per modificare elementi della LISTA. Benché
utile e supportato, può causare risultati
bizzarri se gli elementi della LISTA non sono variabili.
L'uso di un regolare ciclo foreach per questi scopi
sarebbe più chiaro nella maggior parte dei casi.
Consultate anche grep per un array costituito da
quegli elementi della lista originale per i quali
la valutazione del BLOCCO o dell'ESPR produce un valore
vero.
Con { cominciano sia i blocchi che i riferimenti a
hash, quindi map { ... può essere sia l'inizio
di map BLOCK LIST che l'inizio di map EXPR, LIST.
Poichá perl non guarda avanti alla ricerca della
} di chiusura, deve formulare una congettura a
proposito di ciò con cui ha a che fare, basandosi
su quello che trova subito dopo {.
Tipicamente indovina, ma in caso contrario non
capirà che qualcosa non va fino a quando non
arriverà alla }, trovando una virgola di troppo
(o mancante). L'errore sintattico sarà
segnalato vicino alla } ma dovrete cambiare qualcosa
vicino alla {, ad esempio usare un + unario
per aiutare un pochino il perl:
%hash = map { "\L$_", 1 } @array # perl crede sia una ESPR. sbagliato
%hash = map { +"\L$_", 1 } @array # perl crede sia un BLOCCO. giusto
%hash = map { ("\L$_", 1) } @array # anche questo funziona
%hash = map { lc($_), 1 } @array # cosi` come questo
%hash = map +( lc($_), 1 ), @array # questa e` una ESPR e funziona!
%hash = map ( lc($_), 1 ), @array # viene valutato in (1, @array)
oppure, per forzare un costruttore di hash anonimi, usate +{
@tanti_hash = map +{ lc($_), 1 }, @array # e` un'ESPR, quindi ha bisogno della , in fondo
e otterrete una lista di hash anonimi, ciascuno con una sola coppia chiave/valore.