Quando una subroutine viene chiamata, i parametri passati sono messi in una matrice speciale @_
. Si può consumare questo fila per valori spostando fuori my $foo = shift
o alla cessione di matrice diretta my ($foo,$bar)[email protected]_;
È anche possibile usare i valori direttamente dalla matrice: $_[0]
Perché uno contro gli altri? L'assegnazione diretta dell'array è la più comune e standard. A volte il modo shift è usato quando ci sono valori finali finali. L'utilizzo diretto dell'array è sconsigliato tranne in alcune piccole nicchie: funzioni wrapper che chiamano altre funzioni, specialmente all'interno degli oggetti. funzioni che avvolgono altre funzioni e modificano gli input. Inoltre la particolare forma di goto &func
che scende immediatamente la pila chiamata corrente e chiede Funz al valore corrente di @_
.
# 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]; }