utilizzo degli array perl

Non conoscendo il perl, ma dovendone fare uso ho dovuto imparare alcune cose, tra cui l'utilizzo degli array. Di conseguenza ho scritto a mio uso e consumo un prontuario sull'utilizzo degli array in perl.
Naturalmente si tratta di qualche riga senza alcuna pretesa, pensate privilegiando l'approccio pratico a quello stilistico.
Per maggiori informazioni: www.perl.it e www.perl.org

Uso di array perl.

Il nome di un array è preceduto da @.
l'assegnazione può essere fatta in questo modo:
@ar=("uno","due",$variab,442);

in cui si mescolano costanti di vario tipo e variabili

il numero di elementi dell'array di ottiene assegnando a uno scalare l'array, es:
$numEle=@ar;

Un ciclo per scandire completamente un array è il seguente:
for ($k=0;$k<@ar;$k++){
    print @ar[$k] . "\n";
}

il numero di elementi dell'array si può ottenere anche con la funzione scalar, che funziona con le istruzioni che non modificano il contesto in scalare, come print
print scalar(@ar);

Per ottenere il valore corrispondente all'ultimo indice si può usare:
print @#ar;
In questo caso si ritorna un valore inferiore di 1 rispetto al valore ritornato da scalar

volendo ridurre le dimensioni di un array, si assegna un valore a @#ar, esempio:
@#ar=2;
riduce la dimensione di @ar a 3 elementi.

Un array può essere assegnato a un altro copiandolo:
@x=@ar; #assegna l'array ar a x (copiandolo);

Per assegnare un array a un metodo di un oggetto bisogna usare le graffe:
@{$combo1->{elenco}}=@ele;

Posso assegnare elementi a un array:
@ar[2]='prova';
Se l'elemento 2 esiste lo sovrascrive, altrimenti lo crea (e crea anche eventuali elementi 0 e 1 vuoti se non esistono)

Altre istruzioni per utilizzare un array come stack:
push @ar, 'elemento';
$a= pop @ar;

push inserisce un elemento al termine dell'array
pop estrae (eliminandolo dall'array) l'ultimo elemento dell'array.

per gestire l'elemento di testa (indice 0) di un array si usano le istruzioni shift e unshift
unshift @ar, 'prova';   #inserisce il valore 'prova' in testa all'array (gli elementi esistenti sono spostati di un indice)

$x= shift @ar; #mette il primo elemento dell'array nella variabile $x e lo toglie dall'array (spostando gli indici a ritroso)

le istruzioni push e unshift possono inserire degli array, oltre agli scalari.

Per operare in maniera avanzata sugli array c'è la funzione splice che permette di inserire e rimuovere elementi in qualunque punto di un array.

Per ordinare un array si usa la funzione sort, per invertire l'ordine si usa reverse

Passaggio di array a funzioni:
tutti i parametri vengono raccolti nell'array di default _@
pertanto si può utilizzare direttamente _@, oppure recuperare tramite shift i vari elementi dell'array

Un modo un po' rozzo per passare un array e utilizzarlo dentro la funzione è  passare come primo parametro la dimensione dell'array
esempio:
sub testarray{
$n=shift;         # numero di elementi dell'array
for($i=0;$i<$n;$i++){ #carico l'array
        push @a,shift;
}
for ($i=0;$i<@a;$i++){  # stampo l'array
        $asd.=@a[$i];
}
return $asd;
}

Il modo "canonico" è usare le REFERENCE, ovvero i puntatori
esempio:

sub testarray2 {
my $aref=shift;  #recupero puntatore
my @arr = @$aref; #definisco array

}
utilizzo:
testarray2(\@ar);

Se voglio passare due array
sub testarray3 {
my $aref1=shift;  #recupero puntatore
my @arr1 = @$aref1; #definisco primo array
my $aref2=shift;  #recupero puntatore
my @arr2 = @$aref2; #definisco primo array

}
utilizzo:
testarray3(\@ar1,\@ar2);