问题 如何使用Perl默认数组变量@_ with push?


在里面 perlvar文档 有一个关于的文字 @_

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

这是一种常用的使用方式 shift 没有参数从数组中获取第一个元素。它经常被用作:

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

    ...
}

但在文档中写道,它可以使用 push,但我没有明确指定就无法创建工作示例 @_ 推动。从阅读这篇文档,我期待 push 123; 推动 @_,但它不起作用。


10225
2018-06-21 00:22


起源

通过提交此错误 perldoc perlbug - toolic
我用过perbug并发送了一个消息。这是我发送的 - gist.github.com/bessarabov/2e938f4bbb79e78d1941 - bessarabov


答案:


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

@_ 是默认值 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 文件。


11
2018-06-21 00:30