-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


Funzioni Perl in italiano

indietro

  • keys HASH

    Restituisce una lista contenente tutte le chiavi dell'hash indicato. (In contesto scalare, restituisce il numero di chiavi).

    Le chiavi sono restituite in ordine apparentemente casuale. Tale ordine casuale sarà soggetto a cambiamenti nelle future versioni di perl, ma è garantito essere lo stesso che restituiscono le funzioni values e each (ponendo che l'hash non sia stato modificato). Per ragioni di sicurezza, a partire dal Perl 5.8.1 l'ordinamento è differente anche tra diverse esecuzioni di Perl (consultate perlsec/"Algorithmic Complexity Attacks" ["Attacchi di Complessità Algoritmica", NdT]).

    Come effetto collaterale, la chiamata a keys() reimposta l'iteratore interno dell'HASH (si veda each). In particolare, una chiamata a keys() in un contesto vuoto, reimposta l'iteratore senza alcun costo computazionale aggiuntivo.

    Ecco ancora un altro modo per stampare le variabili d'ambiente:

        @chiavi = keys %ENV;
        @valori = values %ENV;
        while (@chiavi) {
    	print pop(@chiavi), '=', pop(@valori), "\n";
        }

    oppure ordinate per chiave:

        foreach $chiave (sort(keys %ENV)) {
    	print $chiave, '=', $ENV{$chiave}, "\n";
        }

    I valori restituiti sono copie delle chiavi originali nell'hash, dunque modificare esse non modifica l'hash originale. Fate il confronto con values.

    Per ordinare un hash per valore, dovrete utilizzare una funzione sort. Ecco un ordinamento numerico decrescente di un hash, secondo i suoi valori:

        foreach $chiave (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
    	printf "%4d %s\n", $hash{$chiave}, $chiave;
        }

    Utilizzata come lvalue [valore a sinistra di un'espressione, NdT], keys vi permette di incrementare il numero di spazi allocati per l'hash indicato. Questo può risultare uno strumento efficiente, se sapete quanto diventerà grande l'hash. (è simile alla pre-estensione di un array tramite l'assegnazione di un numero più grande a $#array). Se scrivete:

        keys %hash = 200;

    allora %hash avrà almeno 200 spazi allocati per esso, 256 in realtà, poiché arrotonda alla successiva potenza di due. Questi spazi saranno mantenuti anche se scrivete %hash = (), usate undef %hash se volete liberare lo spazio in memoria quando %hash è ancora nello scope. Non potete ridurre il numero di spazi allocati per l'hash utilizzando keys in questo modo (ma non dovrete preoccuparvi del fare ciò per sbaglio, poiché il tentativo non ha alcun effetto collaterale).

    Consultate anche each, values e sort.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google