Lezioni pratiche sulla programmazione in Perl

Operazioni degli array
Come abbiamo visto gli array altro non sono che un insieme di dati o meglio valori, dotati di una grande flessibilità sintattica e manipolabili a piacimento, ma per semplificare ulteriormente il loro impiego ed utilità, il Perl aggiunge un insieme di operazioni esclusive per l'array.
Vediamo alcuni esempi:
 
Pusch e pop
Come ormai saprete gli array sono composti da una lista ordinata, in un certo criterio, di valori indicizzati tra 0 ed n valori -1, generalmente considerata una pila di dati (stack), parliamo adesso degli operatori che agiscono sull'ultimo elemento della pila, chiamata in gergo coda della lista, essi sono pusch per aggiungere valori in coda all'array e pop per togliere valori all'array, ecco come poter implementare tali operatori:

@abc=(12,23,34,45,56);
push (@abc,67,78,89);
print "@abc\n";
# l'array @abc ora vale
# (12,23,34,45,56,67,78,89)
pop(@abc);
print "@abc\n";
# ora l'array @abc ora vale
# (12,23,34,45,56,67,78)
# non è detto che si debba perdere
# l'ultimo valore di un array, ma è
# possibile salvarlo in un nuovo scalare
# per un successivo impiego
$a=pop(@abc);
print "@abc\n";
print "$a\n";
# ovviamente tali operatori si possono
# applicare anche ad array nulli, senza
# creare alcun disaggio all'interprete
# che si limiterà a restituirci un valore null
@ab=( );
$b=pop @ab;
print "@ab\n";
print "$b\n";
push (@ab,"ciao", "mondo")
print "@ab\n";

Shift e unshitf
Prendiamo ora in considerazione la testa della nostra pila di valori, e cioè la parte sinistra del nostro array, mediante l' operatore shift è possibile togliere il primo elemento della pila, mentre con l'operatore unshift è possibile aggiungere nuovi valori in testa alla pila, facciamo alcuni esempi:

@az=(1,2,3,4,5);
shift @az;
print "@az\n";
# varrà (2,3,4,5)
unshift(@az,7,9,6,1,0,-5);
print "@az\n";
# varrà (7,9,6,1,0,-5,2,3,4,5)
# ovviamente anche in questo caso
# è possibile salvare il valore di testa
# che intendiamo eliminare dall'array
# per un successivo impiego
$a=shift @az;
print "$a\n";
# $a varrà 7

Sort e reverse
Il linguaggio Perl ci permette di stabilire l'ordine degli elementi interni di un array, in modo da soddisfare l'esigenze di un ordinamento ascendente o discendente, sia per valori numerici, sia per  valori stringa, gli operatore impiegati per ottenere tale risultato saranno la funzione sort e reverse. Ecco vi un esempio:

@a=(1,6,8,3,'3,45','6,12345',0,'0,0000012',2,4,76,5,7);
# ora se vogliamo rendere la stessa stringa in un modo
# più ordinato dovremmo creare un secondo array con
# la funzione sort
@b=sort (@a);
print "@a\n";
# l'array @a rimarrà invariato e varrà
# 1 6 8 3 3,45 6,12345 0 0,0000012 2 4 76 5 8 7
print "@b\n";
# l'array @b varrà
# 0 0,0000012 1 2 3 3,45 4 5 6 6,12345 7 76 8
# ora è anche possibile specificare l'ordine inverso
# tramite la funzione reverse, che però andrà applicata
# all'arrai @b e non a @a
@c=reverse (@b);
print "@c\n";
# varrà "8 76 7 6,12345 6 5 4 3,45 3 2 1 0,0000012 0"

Ovviamente tali funzioni valgono anche per i numeri negativi, ma il loro ordinamento sarà un po' differente di come ci aspetteremo, quindi fate molta attenzione nel loro impiego, vediamo un esempio:

@a=(-34,-54,-2,-12,-3,-1);
@b=sort (@a);
print "@b\n";
# varrà -1 -12 -2 -3 -34 -54

In ultimo vediamo un esempio di ordinamento di valori stringhe interne ad un array:

@a=(casa,mare,'città',persone,internet,amici,in,internet);
@b=sort (@a);
print "@b\n";
# varrà "amici casa città in internet internet mare persone"
# seguendo un ordine alfabetico, nel caso di array contenenti
# valori stringa e valori numerici, i valori numerici avranno
# la precedenza sulle stringhe, come anche i valori numerici
# negativi avranno la precedenza su quelli positivi