Ejercicio: Identificadores entre LLaves

En general, en un contexto en el que se espera un identificador de variable, Perl interpreta un identificador entre llaves como una cadena literal. Explique la conducta de Perl ante el siguiente código:
lhp@nereida:~/Lperl/src/testing$ cat -n shift.pl
     1  use strict;
     2
     3  my @puf = (1..10);
     4  toto(\@puf);
     5
     6  sub toto {
     7    my @a = @{shift};
     8    print "@a\n";
     9  }
lhp@nereida:~/Lperl/src/testing$ perl -c shift.pl
Global symbol "@shift" requires explicit package name at shift.pl line 7.
shift.pl had compilation errors.
¿Que ocurre si sustituimos la línea 5 por my @a = @{shift()};?

Casiano Rodríguez León
2009-10-04