Como ejemplo, supongamos que queremos escribir una función shift2
que retorna y elimina los dos primeros elementos del principio de un array. 
Nos gustaría usarla como shift:
@a = 1..10; ($f, $s) = shift2 @a;
Si queremos escribirla, no vale hacer:
sub shift2 { splice @_, 0, 2 }
Observe el comportamiento del siguiente programa.
$ cat -n shift2.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3
     4  sub shift2 { splice @_, 0, 2 }
     5
     6  my @a = 1..5;
     7  my ($f, $g) = shift2 @a;
     8
     9  local $" = ',';
    10  print "f = $f, g = $g  \@a = (@a)\n";
$ ./shift2.pl
f = 1, g = 2  @a = (1,2,3,4,5)
La llamada a splice en la línea 4 retira
Los elementos de @_ pero no del array @a.
La solución al problema es pasar el array por referencia:
sub shift2 { splice @{$_[0]}, 0, 2 }
pero entonces la llamada queda distinta, obligándonos a pasar la referencia:
@a = 1..10; ($f, $s) = shift2 \@a;
Casiano Rodríguez León
