Как я получаю часть от ссылки на массив?

Давайте скажем, что у нас есть следующий массив:

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 ?
27
задан Michael Carman 23 April 2010 в 17:23
поделиться

3 ответа

Чтобы получить фрагмент, начинающийся со ссылки на массив, замените имя массива блоком, содержащим ссылку на массив. Я использовал пробелы, чтобы разложить части, но это все равно:

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

С новой функцией пост-разыменования (экспериментальной) в v5.20 ,

use v5.20;
use feature qw(postderef);
no warnings qw(experimental::postderef);

my @slice = $aref->@[1,3,2];
30
ответ дан 28 November 2019 в 05:12
поделиться
my $arr_ref2 = [ @$arr_ref[0..2] ];
5
ответ дан 28 November 2019 в 05:12
поделиться

Просто нарежьте ссылку (синтаксис аналогичен разыменованию, см. Комментарии), а затем превратите полученный список обратно в ссылку:

my $arr_ref2=[@$arr_ref[0..2]];
13
ответ дан 28 November 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: