Perl/Variabili hash
Wikibooks, manuali e libri di testo liberi.
Gli hash si possono immaginare come dei vettori che hanno i vagoni "con nome" al posto che numerati. Analogamente agli array sono un insieme di scalari.Come nel treno le carrozze sono numerate , così negli hash per identificare una informazione si usa un "nome". Non esiste però alcun modo di legare l'ordine di immissione dei dati e il loro successivo recupero. L'unica garanzia è che ogni "nome" assegnato al un vagone (chiave-key) corrisponde uno ed un unico valore (valore-value).
Indice |
[modifica] I NOMI
Come per le scalari i nomi degli hash possono essere composti da lettere, numeri, "_" , "'" ed avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.
[modifica] IL CONTENUTO
Il contenuto è un qualsiasi scalare. A differenza dell'array l'hash è un elemento che associa una coppia. Vediamo la sintassi per creare un hash:
%a; #Ho definito un hash ma non l'ho riempito %a = (); #Ho definito un hash ed è vuoto ! %a = ( 'mario' , 'maria' , 'giancarlo' , 'giancarla' , 'carmelo' , 'carmela' );
In questo modo ho associato alla chiave mario => maria , a giancarlo => giancarla e a carmelo => carmela.
NOTA: in questo caso si usa un array per definire un hash.Ma mentre uno è una fila di "informazioni" , l'hash è una associazione fra due valori.
La stessa associazione è possibile scriverla (associazioni più chiare):
%a = ( mario => 'maria'
, giancarlo => 'giancarla'
, carmelo => 'carmela');
Per ottenere il valore associato ad una chiave si usa questa forma:
print $a{mario}."\n";
che mostrerà "maria". Come si può notare il costrutto $a{<nome>} non è equivoco ma identifica in modo assoluto l'unico valore associato a <nome>.
[modifica] elenco delle keys e dei values
Per ottenere l'elenco delle chiavi si usa keys
print (keys %a)."\n";
mentre per i valori si usa values
print (values %a)."\n";
entrambe queste funzioni ritornano un array.
[modifica] exists e delete
Queste due funzioni consentono di verificare se un certo dato esiste , e poter cancellare un certo dato. Quindi è possibile:
%a = ( mario => 'maria'
, giancarlo => 'giancarla'
, carmelo => 'carmela');
print (exists $a{mario})." , ".(exists $a{beppe})."\n";
$b = delete ( $a{mario} );
print "b=$b , %a:".join(" , " ,(keys %a))."\n";
che mostrerà: 1 , 0 b=maria , %a:giancarlo , carmelo
[modifica] each
Each consente di prelevare una coppia key valore da un hash es:
( $chiave , $valore ) = each ( %a );
Normalmente lo si incontra associato ad un while:
while ( ( $chiave , $valore ) = each ( %a ) )
{
print "chiave : $chiave , valore : $valore ( $a{$chiave} ) \n";
}
In questo modo si possono vedere tutti i valori associato ad un hash.

