Cuando se invoca una subrutina, los parámetros pasados se ponen en una matriz especial @_
. Uno puede consumir esta matriz por valores cambiantes cabo my $foo = shift
o mediante la asignación de matrices directa my ($foo,$bar)[email protected]_;
Incluso es posible utilizar los valores directamente de la matriz: $_[0]
Por qué uno contra los otros? La asignación de matriz directa es la más estándar y común. A veces, la forma de desplazamiento se usa cuando hay valores finales opcionales. Se desaconseja el uso directo de matriz, excepto en algunos nichos pequeños: las funciones de envoltura que llaman a otras funciones, especialmente al interior de los objetos. funciones que envuelven otras funciones y modifican las entradas. También la forma especial de goto &func
que inmediatamente deja caer la pila de llamadas actual y llama a func en el valor actual de @_
.
# use shift for optional trailing values
use v5.10;
my $foo = shift;
my $bar = shift // 'default bar value';
my $baz = shift // 'default baz value';
#obj method to call related non-object function.
sub bar { my $self = shift; _bar(@_) }
sub longname { shortname(@_) }
sub get { return $_[0]->$_[1]; }