Lezioni pratiche sulla programmazione in Perl

Assegnazione dei valori
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";