indietro

  • map BLOCCO LISTA
  • map ESPR, LISTA

    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.