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

yjghlzjz  于 2022-12-13  发布在  Perl
关注(0)|答案(4)|浏览(192)

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

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:我已经把它写成了一个函数--我正在寻找一个更独立的方法。

vkc1a9a2

vkc1a9a21#

您可以splice它:

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

j8ag8udp2#

如果将数组ref设置为topic,则不需要为其给予名称:

sub returns_array_ref {[1 .. 5]}

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

或者,如果您使用的是列表:

sub returns_list {1 .. 5}

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

ttisahbt3#

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

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

这将返回与上例相同的结果:

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

fslejnso4#

我只使用数组变量来获取len:

@a = (1,2,3,4,5);
print @a[1..@a];
# output: (2,3,4,5)

相关问题