Прежде всего, как сказал Flying_whale в своем комментарии , в Perl списки всегда сглаживаются.Многомерные списки не существуют.Это означает, что
( 1, 2, 3, (4, 5) )
- это то же самое, что и
( 1, 2, 3, 4, 5 )
или
( 1, (2, (3, (4, (5, () ) ) ) ) )
Все они сглаживаются.
КакЯ извлекаю подмассивы , используя их размер или определяю индекс конца каждого элемента?
Вы говорите, что знаете размер каждого элемента.В этом случае у вас есть несколько опций.
# index 0 1 2 3 4 5 6 7 8 9 10 11 12
my @long_array = ( qw(a b c), qw(a 2 3 4 5 j), qw(l), qw(t x 51));
my @abc = @long_array[0 .. 2];
my @a2345j = @long_array[3 .. 8];
my $l = $long_array[9];
my @tx51 = @long_array[10, 11, 12];
В основном это фрагментов массива , поэтому сигил из @long_array[0 .. 2]
равен @
, а не $
, поскольку выражение возвращает список , а не скаляр .
Альтернативой является использование splice
, но это изменило бы ваш начальный массив.
В любом случае вы должны знать начало и длину каждого отдельного подсписка.Поскольку нет подсписков, это единственный способ получить каждый фрагмент данных.Если вы не знаете ни начального индекса, ни длины, вам не повезло.