Oltre a permettere l'accesso diretto a singoli elementi di un array, Perl fornisce altri interessanti modi per interagire con tali strutture dati. In particolare, esistono funzioni che rendono molto efficiente l'uso di un array in Perl per implementare una coda o uno stack.
Pop.
La funzione pop rimuove e restituisce l'ultimo elemento di un array.
In questo primo esempio, dato un array di tre elementi, la funzione pop rimuove l'ultimo elemento (l'elemento con indice massimo) e lo restituisce.
my @names = ('Foo', 'Bar', 'Baz');
my $last_one = pop @names;
print "$last_one\n"; # Baz
print "@names\n"; # Foo Bar
Nel caso particolare in cui l'array di origine fosse vuoto, la funzione pop ritornerà undef.
Push.
La funzione push aggiunge uno o più elementi in coda ad un array. (Beh, in realtà può anche aggiungere zero elementi, ma non sembra una cosa molto utile di per sé).
my @names = ('Foo', 'Bar');
push @names, 'Moo';
print "@names\n"; # Foo Bar Moo
my @others = ('Darth', 'Vader');
push @names, @others;
print "@names\n"; # Foo Bar Moo Darth Vader
In questo esempio, partiamo da un array di due elementi. Attaverso push "spingiamo" un singolo scalare in coda al nostro array, che viene esteso così a tre valori.
Con la seconda chiamata a push, abbiamo spinto il contenuto dell'array @others in coda all'array @names, cosicché quest'ultimo è ora un array di cinque elementi.
Shift.
La funzione shift trasla l'intero array verso sinistra, se assumiamo l'array cominciare dal lato sinistro e crescere verso destra. L'elemento che era al primo posto nell'array "cade giù" dall'array e diventa il valore di ritorno della funzione. (Se l'array è vuoto, shift restituisce undef).
Al termine dell'operazione, l'array sarà più corto di un elemento.
my @names = ('Foo', 'Bar', 'Moo');
my $first = shift @names;
print "$first\n"; # Foo
print "@names\n"; # Bar Moo
Questo è analogo a pop, ma funziona dal lato minore dell'array.
Unshift.
La funzione unshift è l'operazione inversa di shift: prende uno o più valori (o nessun valore, se ci tieni) e lo inserisce all'inizio dell'array, spostando gli elementi preesistenti verso destra.
Gli argomenti di unshift possono essere un singolo scalare, nel qual caso quel valore diventerà il primo elemento dell'array; o, come si vede nel secondo esempio, un secondo array. In questo caso, gli elementi del secondo array (@others nel nostro caso) saranno copiati in testa al primo array (@names nel nostro caso), spostando gli alti elementi in posizioni maggiori.
my @names = ('Foo', 'Bar');
unshift @names, 'Moo';
print "@names\n"; # Moo Foo Bar
my @others = ('Darth', 'Vader');
unshift @names, @others;
print "@names\n"; # Darth Vader Moo Foo Bar
Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:
Nessun commento:
Posta un commento
Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti.