在问题 "Is returning a whole array from a Perl subroutine inefficient"如果不需要,有两个人建议不要优化。作为一般规则,优化会增加复杂性,如果不需要,简单更好。但是在这种特定情况下,返回一个数组与一个数组引用,我看不出有任何增加的复杂性,我认为界面设计的一致性会更重要。因此,我几乎总是做类似的事情:
sub foo
{
my($result) = [];
#....build up the result array ref
$result;
}
有什么理由我不应该这样做,即使是很小的结果?
最佳答案
由于没有人提到wantarray
, 我会 :-)
我认为让调用者决定它想要结果的上下文是一个很好的做法。例如,在下面的代码中,您向 perl 询问调用子例程的上下文并决定返回什么。
sub get_things {
my @things;
... # populate things
return wantarray ? @things : \@things;
}
然后
for my $thing ( get_things() ) {
...
}
和
my @things = get_things();
由于列表上下文,可以正常工作,并且:
my $things = get_things();
将返回数组的引用。
有关
wantarray
的更多信息|您可能想查看 perldoc -f wantarray
.编辑:我忽略了第一个答案,其中提到了
wantarray
,但我认为这个答案仍然有效,因为它使它更清晰一些。
关于perl - 为什么不应该返回数组 ref?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550906/