Nella precedente lezione, abbiamo visto in modo
sommario come sia possibile ed semplice utilizzare le variabili
array nel linguaggio Perl scripting, vediamo ora di approfondire il
discorso, illustrando più nel dettaglio le funzionalità
dell'array.
Come abbiamo già accennato un array altro non è che un
valore di una variabile contenete a sua volta altre variabili, sia
esse scalari sia anche array stesse, non è necessario inoltre
specificare la variabile array, per applicare in uno script
una sua variabile interna, vediamo quindi degli esempi.
@abc=(' a',' b',' c');
$abc="a b c";
Queste due variabili pur avendo lo stesso nome, definiscono due
valori completamente differenti tra loro e senza alcun tipo di
legame interno, mentre se avessimo scritto quanto segue:
@abc=(' a',' b',' c');
$abc[0]="a b c";
avremmo avuto per risultato un nuovo array uguale a
"@abc=('a b c',' b',' c');".
Potremmo inoltre definire un array vuoto e decidere in seguito di
aggiungere i suoi valori interni, richiamandoli con nouvi scalari,
(si ricorda ancora una volta, che come per il linguaggio C, C++,
Java, ecc., il conteggio dei valori interni ad un array parte da
zero anziché da uno), vediamo quindi un altro esempio:
@a = ();
$a[0] ="a1 ";
$a[1] ="a2 ";
$a[2] ="a3 ";
$a[3] ="a4 ";
$a[7] ="a8 ";
Come potrete notare, non esiste limite al numero di valori
interni ad un array, come anche non esiste alcuna regola nel creare
in un particolar ordine, i nuovi scalari. In questo caso infatti ci
siamo limitati a definire il valore dei nuovi scalari partendo dal
primo elemento, indicizzato col numero 0, fino al quarto,
indicizzato col numero 3, dopo di che abbiamo fatto un bel salto per
arrivare all'ottavo elemento, indicizzandolo col numero 7, ignorando
il quinto sesto e settimo elemento.
Ora se ci accingiamo a completare il nostro programma chiedendoli di
stampare il valore di @a, il nostro caro interprete Perl senza fare
troppe domande, si limiterà ad eseguire alla lettera i nostri
comandi, proprio come noi vogliamo. Completiamo l'esempio nel
seguente modo:
print @a;
print "\n";
# con queste prime stringhe chiediamo
# all'interprete di stampare il valore di @a
# mentre con l'escape \n chiediamo di tornare a capo
print "@a\n";
# ora invece abbiamo chiesto di stampare la variabile @a
print "$a[0]\n";
print "$a[1]\n";
print "$a[2]\n";
print "$a[3]\n";
print "$a[4]\n";
print "$a[5]\n";
print "$a[6]\n";
print "$a[7]\n";
# ora invece abbiamo chiesto di stampare
# ad uno ad uno tutti gli scalari compresi in @a
Eseguendo questo programma vi accorgerete ulteriormente della flessibilità
del linguaggio, nel valutare le variabili non definite dal
programmatore. Ma le meraviglie non finiscono qui, proviamo quindi
ad ottenere qualcosa di più complicato, e cioè cerchiamo di
ottenere il valore di un array, pur non specificandolo nel nostro
programma, ma creando solo degli indici scalari, non ci avete capito
niente vero? poco male, vediamo subito un esempio molto semplice:
$a[0]= "33 ";
$a[1]= "trentini ";
$a[2]= "entrarono ";
$a[3]= "a ";
$a[4]= "Trento ";
print @a;
Come potrete notare ci siamo limitati soltanto a definire un
indice di scalari associati al nome "a", ora pur non
avendo specificato una variabile array per "a", eseguendo
il nostro script l'interprete sarà in grado di determinare il
valore della variabile array @a,(che dite..? non è fantastico?) ,
altre piccole comodità del nostro linguaggio, riguardano gli array
contenenti solo stringhe, e quelli contenenti un elenco continuo di
numeri, ad esempio:
@g=("Filippo","e","panaro.");
# equivale al modo più sbrigativo
# alla seguente espressione
@h=qw(Filippo e panaro.);
print "@g\n";
print "@h\n";
@i=(4,5,6,7,8,9,10,11,12,13,14);
# equivale al modo più sbrigativo
# alla seguente espressione
@l=(4..14);
print "@i\n";
print "@l\n";
# ma ancora, è anche possibile
definire una
# variabile array di array nel seguente modo
@m=(@g,@i);
print "@m\n";