如何从匿名Perl数组中获取索引N到结尾的所有元素?

时间:2011-11-09 21:35:22

标签: arrays perl

在Perl 5中,当我们有一个命名数组时,例如@a,从索引$N开始获取元素很简单,有点slicing

my @result = @a[$N..$#a];

是否有标准方法对匿名数组执行相同操作,而无需明确提供长度?即可以这样:

my @result = (0,1,2,3,4,5)[2..5];

或更具体地说,这是:

my @result = (0,1,2,3,4,5)[$N..5];

转换为不需要显示上限范围的内容?也许一些模糊的Perl语法?也许有点切割而不是切片?

PS:我已经把它写成了一个函数 - 我正在寻找一种更独立的方法。

3 个答案:

答案 0 :(得分:18)

你可以splice

@result = splice @{[0..$M]}, $N;  # return $N .. $M

答案 1 :(得分:1)

我认为暴徒的splice是最好的选择,但本着选择的精神:

my @result = reverse ((reverse 0..5)[0..$N+1]);

返回与上例相同的结果:

my @result = (0..5)[$N..5];

答案 2 :(得分:1)

如果将数组设置为主题,则无需为数组引用名称:

    sub returns_array_ref {[1 .. 5]}

    my @slice = map @$_[$n .. $#$_] => returns_array_ref;

或者如果您正在使用列表:

    sub returns_list {1 .. 5}

    my @slice = sub {@_[$n .. $#_]}->(returns_list);