Corso di Perl

Gli array I

 

Cos’è un array

Array in Inglese significa “schieramento”, e in informatica il significato è simile: un array è un insieme di variabili, che vanno a formare un’entità più vasta (avete letto la lezione n. 6 sulle variabili, vero?).
Il Perl prevede due tipi di array: quelli scalari e quelli associativi.

Array scalari

Supponiamo che stiate scrivendo un programma che calcola gli stipendi della vostra azienda, che conta ben 10.000 dipendenti. Senza sapere nulla degli array, potreste essere costretti ad usare 10.000 variabili diverse! Invece di andarvene dall’azienda sbattendo la porta, potete definire un array in questo modo:

@dipendenti = ();

Invece del prefisso “$” delle variabili scalari, usiamo il “@” che indica un array. Inoltre, in modo simile alle variabili scalari, agli array possiamo assegnare direttamente dei valori tramite una lista, che è appunto una semplicissima lista di valori scalari (cioè tutto ciò che può essere infilato in una variabile scalare), separati da virgole e racchiusa tra parentesi. Nel nostro caso, l’array inizialmente è vuoto, perciò gli diamo una lista vuota, che sono due parentesi vuote. Potevamo fare così:

@dipendenti = ( “Mario Rossi”, “Marco Verdi”, “Luca Bianchi”);

e avremmo messo nel nostro array alcune stringhe di caratteri. Per inciso, nulla vieta di mescolare numeri e stringhe, ma nel nostro caso ha più senso avere solo stringhe.
Quando vogliamo riferirci ad un particolare elemento dell’array, usiamo questa sintassi:

$dipendenti[2] =  “Giuseppe Verdi”;

Notate che abbiamo usato il simbolo “$”, perché ci riferiamo ad un singolo valore scalare (nonostante sia contenuto in un array). Per specificare esattamente quale elemento vogliamo, mettiamo il suo indice tra parentesi quadre. L’indice è il numero progressivo assegnato all’elemento, partendo da zero. Cioè, questa nostra ultima istruzione mette “Giuseppe Verdi” al posto di “Luca Bianchi”, che è il terzo elemento (quindi il n. 2, se si conta partendo da zero).
Possiamo anche fare una cosa del genere:

print @dipendenti[0..2];

che stamperà sullo schermo i primi tre valori contenuti nell’array (nel nostro caso, tutto quanto). I due punti “..” sono l’operatore range, che specifica un intervallo. Per i più matematici tra voi, specifico che l’intervallo è chiuso (ci sono le parentesi quadre…), mentre per chi programma già sarà bene chiarire che entrambi gli estremi sono inclusi. “0..2” significa gli elementi da 0 a 2 compresi. Notate che abbiamo messo un “@” per indicare che vogliamo un array (in effetti, un sotto-array di quello originario). Mettendo “$”, avremmo ottenuto solo un valore.

Un altro modo:

print @dipendenti[0,2];


che stamperà il primo e il terzo elemento, ma non il secondo (la virgola serve a saltare gli elementi). Questo particolare modo di “affettare” gli array si chiama slicing.
Naturalmente,  gli elementi estratti da un array si possono mettere dentro un altro array, oppure anche dentro una lista (un array in fondo non è che una lista di variabili tutte con lo stesso nome e un indice, scritto in forma abbreviata):


@a = @dipendenti[0,2];
($dip1, $dip2) = @dipendenti[0,2];
@a = (@dipendenti[0,2] , @b, @c[0..5]);

sono tutte assegnazioni valide. Nel terzo esempio abbiamo costruito una lista a partire da tre array o pezzi di array. In questo modo i tre array vengono “espansi”, e viene ricostruita una lista che comprende tutti i valori specificati. Quindi questa lista viene assegnata all’array @a.

Push e pop

Vi chiederete, ma i famosi 10.000 nomi come li metto dentro all’array? Non andranno mica scritti uno per uno? No, gli array possono essere manipolati in molti modi, e il Perl prevede moltissime istruzioni apposite, ad esempio per “riempire” un array a partire dai contenuti di un file (come vedremo nella prossima lezione). Ecco alcuni esempi di istruzioni:

push @array, lista;


aggiunge una lista di elementi in fondo all’array (sostituite “@array” con il nome del vostro array, e “lista” con una lista di dati). La lista può anche essere un singolo dato, in tal caso le parentesi tonde non servono.

pop @array;

esegue il contrario di push, accorciando l’array di un elemento (l’ultimo). Il dato tagliato via viene restituito (o ritornato, in una traduzione diretta dall’Inglese),  cioè viene reso disponibile come risultato dell’istruzione.
Ad esempio, dopo le prime due istruzioni che riguardavano l’array @dipendenti, potremmo scrivere queste due:

$nome = pop @dipendenti;
print pop @dipendenti;


dopo queste istruzioni, $nome conterrà “Giuseppe Verdi”, mentre l’istruzione print stamperà “Marco Verdi”, e l’array @dipendenti verrà ridotto ad un solo elemento, l’onnipresente “Mario Rossi”.

Quello che push e pop fanno alla parte finale dell’array, shift e unshift lo fanno alla parte iniziale. Questo però lo vedremo nella prossima puntata dove termineremo anche la trattazione degli array.

 

Torna all'indice Generale del corso di Corso di Perl di Software Planet