Una volta creato un hash, la sintassi da utilizzare per
accedere a uno dei suoi elementi è la seguente:
Il
simbolo del dollaro ($) prima di hash indica il fatto che di tutto l’hash si vuole estrarre solamente uno scalare (analogamente a quando si accede a un elemento di un array), mentre le parentesi graffe intorno a
key indicano che il valore dell’hash deve essere associato a questa chiave specifica. Ad esempio:
%myHash = (cane => ‘Pluto’,
topo => ‘Topolino’,
cavallo => ‘Orazio’);
print $myHash{cane}; # stampa ‘Pluto’
È anche possibile estrarre in una sola volta i valori corrispondenti a più di una chiave, come nell’esempio seguente:
%myHash = (cane => 'Pluto',
topo => 'Topolino',
cavallo => 'Orazio');
@subset = @myHash{cane, topo}; # subset contiene ‘Pluto’ e ‘Topolino’
Si noti come in questo caso si sia utilizzato l’identificatore di tipo
@, poiché di fatto si sta lavorando in un contesto di lista. Sovente è necessario
esaminare tutti gli elementi di un hash. Se tutte le chiavi che lo compongono sono note, allora si può accedere a ogni singolo valore utilizzando la relativa chiave come indicato in precedenza. Se invece (come è prassi) le chiavi non sono note si può ricorrere alla funzione
keys, che restituisce una lista contenente tutte le chiavi definite per un dato hash.
Si noti che la funzione
keys non restituisce le chiavi in un particolare ordine, poiché esse non sono memorizzate internamente (e quindi restituite) secondo un ordine casuale (comportamento garantito a partire dalla versione Perl 5.8 in poi). L’esempio seguente mostra un impiego della funzione
keys, utilizzando il costrutto
foreach:
%myHash = (cane => 'Pluto',
topo => 'Topolino',
cavallo => 'Orazio');
foreach $animale (keys %myHash)
{ print “il $animale si chiama $myHash{$animale}\n”;}
Se usata in un contesto scalare, la funzione
keys restituisce il numero di chiavi presenti nell’hash specificato. Se invece occorre
conoscere tutti i valori presenti in un hash, allora è possibile utilizzare la funzione
values, che restituisce una lista contenente tutti i valori definiti per un dato hash.
La funzione
values rappresenta un metodo efficiente per recuperare tutti i valori, purché non sia necessario conoscere la chiave associata a un dato valore, in quanto questa informazione non è restituita dalla funzione
values (l’hash lavora sulla relazione chiave-valore, non viceversa):
%myHash = (cane => 'Pluto',
topo => 'Topolino',
cavallo => 'Orazio');
foreach $animale (values %myHash)
{ print “nome: $animale\n”;
}
Se usata in un contesto scalare, la funzione
values restituisce il numero di chiavi presenti nell’hash specificato. Si osservi inoltre che poiché
i valori possono non essere univoci (a differenza delle chiavi), la funzione
values può restituire lo stesso valore più di una volta:
%myHash = (cane => 'Pluto',
topo1 => 'Topolino',
topo2 => 'Topolino',
cavallo => 'Orazio');
foreach $animale (values %myHash)
{ print “nome: $animale\n”;
}