在perlvar文档中有一个文本@_:
在子例程中,数组@_包含传递给该子例程的参数.在子程序中,@ _是数组运算符push,pop,shift和unshift的默认数组.
这是一种使用shift不带参数从数组中获取第一个元素的常用方法.它经常被用作:
sub some_method {
my $self = shift; # the same as `my $self = shift @_;`
...
}
Run Code Online (Sandbox Code Playgroud)
但是在文档中写道它可以与之一起使用push,但是如果没有明确指定@_push ,我就无法创建工作示例.从阅读这篇文章我期待push 123;推动@_,但它不起作用.
Kei*_*son 11
我相信你在文档中发现了一个错误.
@_是默认pop和shift,但不push和unshift.对于两者push和unshift,必须明确指定数组.
perldoc -f push 将语法显示为:
push ARRAY,LIST
push EXPR,LIST
Run Code Online (Sandbox Code Playgroud)
没有选择不指定数组; 同样的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文件中似乎都没有提到这一点.