如何从数组引用中获取切片?

时间:2010-04-23 16:36:35

标签: perl

让我们说我们有以下数组:

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 ?

3 个答案:

答案 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] ];