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