如何访问子程序返回的列表的最后一项而不先将其复制到数组中?

时间:2016-02-06 13:56:00

标签: arrays perl

我正在寻找一种计算成本较低的方法来访问子程序返回的列表的最后一项(不修改子程序本身)。

正如我所看到的,我在下面做的实际上是将返回的列表复制到命名数组@list,或者复制到匿名数组[],然后访问该数组的最后一个值,不是直接返回列表的最后一项。

这里有快捷方式吗?如何直接访问返回列表的最后一项?

sub range { return 0 .. 10**7 }

根据GNU time

,这需要0.808秒的用户时间
my @array = range();
print pop @array;

这里0.792秒:

my @array = range();
print $array[$#array], "\n"

0.680秒:

print pop [ range() ]

1 个答案:

答案 0 :(得分:4)

子程序不返回数组,它们只返回列表。但是你要纠正

my @array = list();

list()返回的值复制到数组中。如果您只关心最后一个值,则可以使用list slice

use strict;
use warnings 'all';
use 5.010;

sub range {
    return 0 .. 10**7;
}

my ($last) = ( range() )[-1];
say $last; # 10000000