让我们说我们有以下数组:
my @arr=('Jan','Feb','Mar','Apr');
my @arr2=@arr[0..2];
如果我们有如下所示的数组引用,我们怎么能做同样的事情:
my $arr_ref=['Jan','Feb','Mar','Apr'];
my $arr_ref2; # How can we do something similar to @arr[0..2]; using $arr_ref ?
答案 0 :(得分:30)
要从数组引用开始获取切片,请将数组名称替换为包含数组引用的块。我用空格来展开各个部分,但它仍然是一样的:
my @slice = @ array [1,3,2];
my @slice = @ { $aref } [1,3,2];
如果块内的引用是一个简单的标量(所以,不是数组或哈希元素或很多代码),你可以不用括号:
my @slice = @$aref[1,3,2];
然后,如果你想要一个引用,你可以使用匿名数组构造函数:
my $slice_ref = [ @$aref[1,3,2] ];
使用新的post-dereference feature (experimental) in v5.20,
use v5.20;
use feature qw(postderef);
no warnings qw(experimental::postderef);
my @slice = $aref->@[1,3,2];
答案 1 :(得分:13)
只需切片引用(语法类似于解除引用,查看注释),然后将结果列表转回ref:
my $arr_ref2=[@$arr_ref[0..2]];
答案 2 :(得分:5)
my $arr_ref2 = [ @$arr_ref[0..2] ];