|
Una lista in Perl è
semplicemente un insieme ordinato di scalari. Una lista può contenere
numeri, stringhe o anche un misto di entrambi questi tipi di dato. In
effetti in Perl la differenza tra una lista ed un array è molto
sottile, tanto che potremmo dire che se assegnamo un nome ad una lista
ciò che otteniamo è un array. Più che altro la distinzione, ben
marcata in altri linguaggi di programmazione, in Perl riguarda
soprattutto il modo in cui vengono utilizzati certi insiemi di dati.
Una lista viene definita elencandone gli elementi, come, ad esempio:
('cani', 'gatti', 'cavalli', 'pesci')
(1, 2, 3, 4, 5, 47, 1.34, 12)
Come abbiamo già visto possiamo inizializzare un array con il
contenuto di una lista con la seguente istruzione:
@animali = ('cani', 'gatti', 'cavalli', 'pesci');
Gli elementi di una lista possono essere ordinati alfabeticamente
utilizzando l'istruzione sort; ad esempio, la seguente istruzione ci
permette di ordinare il contenuto dell'array @animali appena definito:
@animali = sort @animali;
Cogliamo l'occasione per elencare tre importanti istruzioni che
consentono di effettuare delle operazioni elementari sulle liste.
L'istruzione shift restituisce il primo elemento della lista e lo
elimina dalla lista stessa. L'operatore pop restituisce invece
l'ultimo elemento della lista e lo elimina dalla lista. Infine
l'operatore push inserisce un elemento al termine della lista.
Veniamo ora al tipo di dato più importante in Perl, gli array
associativi; citando Larry Wall (l'autore del Perl) si può dire che se
non si pensa in termini di array associativi non si sta pensando in
Perl.
Un normale array ci permette di ``puntare'' ai suoi elementi usando
numeri interi come indici. Un array associativo ci permette di fare la
stessa cosa utilizzando delle stringhe come indici (o chiavi, in
questo caso). Visto che spesso gli elementi dell'array sono stringhe,
in questo modo possiamo associare tra loro coppie di stringhe: il dato
vero e proprio e la chiave (o l'indice) che lo identifica all'interno
dell'array.
Un array associativo è una lista di valori come ogni altro array,
salvo che per il fatto che invece di indicizzare l'array mediante la
posizione di ogni elemento, si indicizza ogni coppia di valori dell'array
mediante il primo elemento della coppia.
Ad esempio supponiamo di voler tenere conto del numero di giorni di
ogni mese dell'anno (supponiamo anche di non essere in un anno
bisestile); il seguente programmino potrebbe aiutarci:
#!/usr/local/bin/perl
# giorni.pl: dato il nome di un mese ne stampa il
# numero di giorni
%giorni = ('gennaio', 31, 'febbraio', 28, 'marzo', 31, 'aprile', 30,
'maggio', 31, 'giugno', 30, 'luglio', 31, 'agosto', 31,
'settembre', 30, 'ottobre', 31, 'novembre', 30,
'dicembre', 31);
print "mese: ";
$mese = <STDIN>;
chop($mese);
print "$mese ha $giorni{$mese} giorni.\n";
In maggiore dettaglio possiamo dire che ci si riferisce ad un array
associativo con il simbolo ``%'' (e non con la chiocciola ``@'', come
per i normali array o le liste); il singolo elemento dell'array
associativo (che, come al solito è uno scalare) è individuato dalla
chiave associata; così il terzo elemento dell'array associativo
definito nell'esempio precedente (31, il numero di giorni del mese di
marzo) è individuato dall'espressione $giorni{'marzo'}.
La funzione chop usata dopo aver letto un input da file, serve ad
eliminare il carattere di fine riga dalla variabile che contiene
l'input (nel nostro caso la variabile $mese).
Osserviamo infine che la funzione keys() restituisce una lista con le
chiavi dell'array associativo passato come argomento, in modo da
consentirci di operare sugli elementi dell'array nell'ordine
desiderato. La funzione values() effettua l'operazione complementare:
restituisce una lista con i valori degli elementi dell'array
associativo passato come argomento.
Lezione
successiva => Torna
all'indice
|