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