Il terzo tipo di dati messo a disposizione da Perl è rappresentato dagli
hash, o
array associativo. Analogamente alle liste e agli array, anche gli hash consistono in insiemi di dati, ma a differenza delle prime, che accedono ai dati mediante un valore numerico (l’indice dell’array), l’hash accede ai suoi elementi mediante una
chiave descrittiva. Gli hash, infatti, sono definiti mediante un insieme di
chiavi, che identificano ciascun elemento dell’hash) e di
valori, che rappresentano il dato associato a una specifica chiave; questa relazione è anche nota come
coppia chiave-valore.
Le variabili che identificano un dato di tipo hash sono caratterizzate dal prefisso
%, mentre per il nome che può essere assegnato valgono le stesse regole viste a proposito degli scalari e degli array. Si rammenti il fatto che variabili di tipo diverso possono comunque avere lo stesso nome, in quanto è l’identificatore di tipo a consentirne la differenziazione:
$myVar; # variabile di tipo scalare
@myVar; # variabile di tipo array
%myVar; # variabile di tipo hash
Perl prevede diversi metodi per inizializzare una variabile di tipo hash. Ad esempio, è possibile creare un hash semplicemente assegnandogli una lista di coppie chiave-valore, in cui i vari elementi sono separati da un virgola:
%myHash = (‘cane’, ‘Pluto’, ‘topo’, ‘Topolino’, ‘cavallo’, ‘Orazio’);
Nell’esempio precedente, alla chiave
cane corrisponde il valore
Pluto, alla chiave
topo il valore
Topolino e così via. Un altro modo per eseguire la stessa inizializzazione è rappresentato dall’
operatore =>, alternativo all’uso della virgola, che ha il vantaggio di rendere maggiormente esplicita la relazione chiave-valore. L’esempio precedente può dunque riscriversi così:
%myHash = (cane => ‘Pluto’,
topo => ‘Topolino’,
cavallo => ‘Orazio’);
Poiché le chiavi di un hash possono soltanto essere di tipo stringa,
utilizzando l’operatore => è possibile omettere gli apici che racchiudono la chiave (a meno che la chiave stessa non contenga degli spazi o dei caratteri speciali). Un’ulteriore alternativa per l’inizializzazione di un hash è rappresentata dall’operatore
qw, già visto a proposito delle liste e degli array:
%myHash = qw(cane Pluto
topo Topolino
cavallo Orazio);
La formattazione serve soltanto per identificare con maggiore chiarezza le relazioni chiave-valore. Questo tipo di inizializzazione è di fatto identica a quella già vista per le liste e gli array: ciò che cambia è il
tipo di variabile a cui questi valori vengono assegnati, il che fa sì che i dati vengano memorizzati e gestiti in maniera differente. Infine, è possibile anche utilizzare delle variabili (scalari) per memorizzare, mediante l’operatore =>, il valore delle chiavi:
($keyCane, $keyTopo, $keyCavallo) = (cane, topo, cavallo);
%myHash = ($keyCane => ‘Pluto’,
$keyTopo => ‘Topolino’,
$keyCavallo => ‘Orazio’);