在里面 perlvar文档 有一个关于的文字 @_:
在子例程中,数组@_包含传递给的参数
那个子程序。在子程序中,@ _是默认数组
数组运算符push,pop,shift和unshift。
这是一种常用的使用方式 shift 没有参数从数组中获取第一个元素。它经常被用作:
sub some_method {
my $self = shift; # the same as `my $self = shift @_;`
...
}
但在文档中写道,它可以使用 push,但我没有明确指定就无法创建工作示例 @_ 推动。从阅读这篇文档,我期待 push 123; 推动 @_,但它不起作用。
我相信你在文档中发现了一个错误。
@_ 是默认值 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 文件。