En Perl las cosas nunca son lo que parece, como te ha comentado Jferrero,
extrae el primer valor de un array, despojando al mismo de ese valor.
Código:
@array = (1,2,3,4);
print shift(@array); # devolvera 1
print "@array"; # devolvera los valores restantes 2 3 4
En perl existen dos variables mágicas $_ y @_, esta están presente en distintos contextos que con el tiempo sabrás.
Cuando llamas a una subrutina y le pasas algunas variables, esta son cargadas al array @_, por ejemplo:
Código:
subrutina('uno','dos','tres');
Anterior mente llamamos a subrutina con nombre subrutina y le pasamos tres valores, ahora verás que dentro de la subrutina estará el array @_ cargado con dichos valores, por ejemplo:
Código:
sub subrutina{
print "@_"; # mostrará uno dos tres
# si aplicamos un shift y no le asignamos ningun array, perl utilizará el array mágico, por tanto si hacemos:
print shift; # devolvera uno
# y
print "@_"; # ahora devolvera dos tres
}
En el caso de
es una convensión y viene a ser el objeto de la clase inicializada, siempre es el primero que vas a recibir, es probable que conozcas PHP $self es equivalente a $this, solamente que en Perl tenés que extraerlo del array mágico.
Pruebalo para ver lo que te indico.
Saludos.