Подтвердить что ты не робот

Как получить фрагмент из ссылки на массив?

Скажем, что мы имеем следующий массив:

my @arr=('Jan','Feb','Mar','Apr');
my @[email protected][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 ?
4b9b3361

Ответ 1

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

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

Ответ 2

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

my $arr_ref2=[@$arr_ref[0..2]];

Ответ 3

my $arr_ref2 = [ @$arr_ref[0..2] ];