当一个子程序被调用时,传递的参数被放入一个特殊的数组@_
中。可以通过将值移出my $foo = shift
或通过直接数组赋值来使用此数组。my ($foo,$bar)=@_;
甚至可以直接使用数组中的值:$_[0]
为什么一个与其他?直接数组赋值是最标准和最常见的。当有可选的尾随值时,有时会使用移位方式。不鼓励直接使用数组,除了少数几个小领域:调用其他函数的包装函数,尤其是在对象内部。包装其他函数并修改输入的函数。还有一种特殊形式,goto &func
它会立即删除当前调用堆栈,并在 . 的当前值上调用 func @_
。
# 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]; }