0

有人会这么愉快地解释为什么接下来会发生吗?这是代码:

#!/usr/bin/perl
use v5.14;
use warnings;

my @arr = (1, 2, 3);

sub func
{
    return @arr;
}

push(&func(), 4);

say @arr;

当我尝试运行它时,输出为Not an ARRAY reference at ....

我想这是因为不是对. 而是对一个普通列表进行&func()评估,并被视为. 有人可以解释为什么会发生这种情况,因为在文档中我没有发现任何与此相关的内容。@arr1, 2, 31ARRAYpushpush

提前致谢。

4

1 回答 1

4

sub 不可能返回数组。您正在返回在列表上下文中评估数组的结果,也就是说您正在返回其内容的列表。显然,这不是你想要的。

push现在将接受对数组的引用,因此您可以使用

sub func {
   return \@arr;
}

push(func(), 4);

请注意,push直到最近才需要一个数组文字,因此如果您想要向后兼容,必须使用以下内容:

sub func {
   return \@arr;
}

push(@{ func() }, 4);

PS — 请注意,我删除了&. 你为什么要告诉 Perl 忽略没有原型的 sub 的原型?

于 2012-09-17T18:27:01.840 回答