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

时间:2015-06-21 00:22:13

标签: perl

perlvar documentation中有关于@_的文字:

  

在子程序中,数组@_包含传递给的参数   那个子程序。在子程序内,@ _是默认数组   数组运算符push,pop,shift和unshift。

使用不带参数的shift来从数组中获取第一个元素是一种常见的方法。它经常被用作:

sub some_method {
    my $self = shift; # the same as `my $self = shift @_;`

    ...
}

但在文档中写道,它可以与push一起使用,但我无法创建工作示例而无需明确指定推送@_。从阅读此文档开始,我期待push 123;推送到@_,但它不起作用。

1 个答案:

答案 0 :(得分:11)

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

@_popshift的默认设置,但不适用于pushunshift。对于pushunshift,必须明确指定数组。

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文件中提及。