有人会如此愉快地解释为什么接下来会发生什么?这是代码:
#!/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()
不评估@arr
,而是评估普通列表1, 2, 3
和1
被视为ARRAY
参数push
。有人可以解释为什么会发生这种情况,因为在push
文档中我发现没有任何相关内容。
提前致谢。
答案 0 :(得分:4)
sub不可能返回一个数组。您将返回在列表上下文中评估数组的结果,也就是说您将返回其内容列表。显然,这不是你想要的。
push
现在将接受对数组的引用,因此您可以使用
sub func {
return \@arr;
}
push(func(), 4);
请注意,push
直到最近才需要数组文字,因此如果您想要向后兼容,请使用以下内容:
sub func {
return \@arr;
}
push(@{ func() }, 4);
PS - 请注意,我删除了&
。你为什么要告诉Perl忽略没有原型的子原型?