如何在推送时使用Perl默认数组变量@_?

bes*_*bov 11 perl

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

我相信你在文档中发现了一个错误.

@_是默认popshift,但不pushunshift.对于两者pushunshift,必须明确指定数组.

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文件中似乎都没有提到这一点.