在perlvar documentation中有关于@_
的文字:
在子程序中,数组@_包含传递给的参数 那个子程序。在子程序内,@ _是默认数组 数组运算符push,pop,shift和unshift。
使用不带参数的shift
来从数组中获取第一个元素是一种常见的方法。它经常被用作:
sub some_method {
my $self = shift; # the same as `my $self = shift @_;`
...
}
但在文档中写道,它可以与push
一起使用,但我无法创建工作示例而无需明确指定推送@_
。从阅读此文档开始,我期待push 123;
推送到@_
,但它不起作用。
答案 0 :(得分:11)
我相信你在文档中发现了一个错误。
@_
是pop
和shift
的默认设置,但不适用于push
和unshift
。对于push
和unshift
,必须明确指定数组。
perldoc -f push
将语法显示为:
push ARRAY,LIST
push EXPR,LIST
没有选择不指定数组;同样适用于perldoc -f unshift
。
(OP已提交Perl错误报告;请参阅https://gist.github.com/bessarabov/2e938f4bbb79e78d1941)
<强>更新强>
这已得到纠正。在Perl的git repo中,它已在提交256ca3d37ed232e10fbb2884be45691e745be7a9
中更正,2015-06-21。修复程序出现在版本5.23.1和5.24.0中。这似乎没有在任何perldelta*.pod
文件中提及。