对性能的影响是比较明显的当的阵列越来越Perl的5.10大,但只有50%左右。
我通常喜欢到回参考,因为它使代码更易于阅读:一个函数只有一个返回值,并避免一些陷阱(自动标评估)作为参考的职位由manu_v提到。
#! /usr/bin/perl
use Benchmark;
sub i_return_an_array
{
my @a = (1 .. shift);
# push things in @a;
return @a;
}
sub i_return_a_ref
{
my @a = (1 .. shift);
# push things in @a;
return \@a;
}
for my $nb (1, 10, 100, 1000, 10000) {
Benchmark::cmpthese(0, {
"array_$nb" => sub { my @v = i_return_an_array($nb); },
"ref_$nb" => sub { my $v = i_return_a_ref($nb); },
});
}
回报:
Rate ref_1 array_1
ref_1 702345/s -- -3%
array_1 722083/s 3% --
Rate array_10 ref_10
array_10 230397/s -- -29%
ref_10 324620/s 41% --
Rate array_100 ref_100
array_100 27574/s -- -47%
ref_100 52130/s 89% --
Rate array_1000 ref_1000
array_1000 2891/s -- -51%
ref_1000 5855/s 103% --
Rate array_10000 ref_10000
array_10000 299/s -- -48%
ref_10000 578/s 93% --
在其它版本的perl,数据可能会有所不同。
无法返回数组或哈希。 Perl中的函数只能返回一个列表或一个标量(取决于函数的上下文) – tadmc 2011-03-16 02:44:47
这是无趣的迂腐。这至少是迂腐约函数返回上下文一个有趣的级别:http://search.cpan.org/perldoc?Want – Schwern 2011-03-19 15:23:03