让我们说我们有以下数组:
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 ?
最佳答案
要获取以数组引用开头的 slice ,请将数组名称替换为包含数组引用的块。我使用空格来散布各个部分,但还是一样:
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];