获取 Perl 数组的最后 N 个元素的最佳方法是什么?
如果数组小于 N,我不希望undefs返回值中有一堆。
@last_n = @source[-$n..-1];
如果你不需要undefs,那么:
@last_n = ($n >= @source) ? @source : @source[-$n..-1];
我认为您想要的称为slice。
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;
输出:
vwxyz
简单,没有数学:
@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
由于标量上下文中的@a 给出了数组 a 的长度,并且因为@a == $#a + 1(除非$[设置为非零),所以可以通过@a[$n..@a-1]--#tmtowtdi 获得从第 $n 个(从零开始计数)到最后一个元素的切片。
TMTOWTDI,但我认为这更容易阅读(但从 中删除了元素@source):
my @last_n = splice(@source, -$n);
如果你不确定它@source至少有$n元素:
my @last_n = ($n >= @source) ? @source : splice(@source, -$n);