Hash
Le variabili hash rappresentano la classica struttura chiave-valore comune a molti linguaggi, come ad esempio gli array associativi (JavaScript e PHP) o le Hashtable (Java). Una variabile hash può essere inizializzata in modo diversi, ad esempio:
%romans_1 = ( 10 => "X", 100 => "C", 1000 => "M", ) ;
oppure
%romans_2 = ( 10, "X", 100, "C", 1000, "M" ) ;
Ottenendo esattamente lo stesso risultato. La differenza riguarda solamente la leggibilità del codice. Possiamo verificarlo estraendo
i valori contenuti nelle due hash: per farlo usiamo la sintassi $hash{chiave}
, ovvero specifichiamo la chiave che vogliamo
estrarre tra parentesi graffe.
print "Dieci in romano (1): $romans_1{10}\n" ; print "Dieci in romano (2): $romans_2{10}\n" ;
In entrambi i casi verrà stampato il simbolo X
(il numero 10 in romano).
Notiamo che quando facciamo riferimento ad un valore dell'hash, trattandosi di identificare un singolo scalare,
usiamo il simbolo $
anziché il simbolo %
. Inoltre, siccome Perl distingue tra i tipi di variabile visti
finora (scalari, array ed hash) possiamo usare gli stessi identificativi per tipi di variabili diverse. In altre parole le
variabili $a
, @a
e %a
avranno in generale valori differenti.
Manipolazione degli hash
Anche gli hash, come gli array, possono essere manipolati molto facilmente. Consideriamo i seguenti esempi
@allkeys = keys %romans_1; @allvalues = values %romans_1; print "All keys: @allkeys\n" ; print "All values: @allvalues\n" ;
che produce
All keys: 1000 10 100 All values: M X C
A differenza degli array gli hash non hanno alcun ordine interno, ovvero i loro elementi non sono ordinati in base agli indici.
E' però possibile ordinarli se necessario, a seconda delle necessità. Esistono alcune strutture hash riservate,
esattamente come nel caso degli scalari e degli array. Uno degli esempi più noti è la variabile %ENV
,
che contiene le variabili d'ambiente disponibili allo script.