假设我们有以下数组:
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 ?
假设我们有以下数组:
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 ?
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] ];
use v5.20;
use feature qw(postderef);
no warnings qw(experimental::postderef);
my @slice = $aref->@[1,3,2];
只需对引用进行切片(语法类似于解引用,参见注释),然后将结果列表转换回引用即可:
my $arr_ref2=[@$arr_ref[0..2]];
@$ref[...]
是使用引用的数组切片;没有中间数组生成。请参阅 http://perlmonks.org?node=References+quick+reference。 - ysth@$ref[...]
和 (@$ref)[...]
一样低效是不好的。 - ysthmy $arr_ref2 = [ @$arr_ref[0..2] ];