Perl Arrays
В этой части Учебника Perl мы узнаем о массивах в Perl. Это обзор работы массивов в Perl. Более подробные объяснения рассмотрим позже.
Имена переменных для массивов в Perl начинаются с «собаки»: @.
Из-за того, что мы настаиваем на использовании режима strict, эти переменные перед первым использованием также нужно объявлять с помощью ключевого слова my.
Не забудьте, что все приведенные ниже примеры предполагают, что в начале вашего скрипта написано
use strict; use warnings; use 5.010;
Объвляем массив:
my @names;
Создаем и присваиваем значения:
my @names = ("Foo", "Bar", "Baz");
Дебаггинг массива
use Data::Dumper qw(Dumper); my @names = ("Foo", "Bar", "Baz"); say Dumper \@names;
Выведет:
$VAR1 = [ 'Foo', 'Bar', 'Baz' ];
Цикл foreach и массмвы perl
my @names = ("Foo", "Bar", "Baz"); foreach my $n (@names) { say $n; }
выведет:
Foo Bar Baz
Обращение к элементу массива
my @names = ("Foo", "Bar", "Baz"); say $names[0];
Обратите внимание, что при обращении к одному элементу массива сигил меняется с @ на $. Это может ввести кого-то в заблуждение, но если подумать, становится довольно очевидно, в чем тут дело.
@ указывает на множественное, а $ указывает на единичное. При обращении к одному элементу массива он ведет себя так же, как и обычная скалярная переменная.
Индексация массива
Индексы массива отсчитываются с нуля. Самый большой индекс всегда содержится в переменной $#имя_массива. Так что
my @names = ("Foo", "Bar", "Baz"); say $#names;
Выведет 2, так как индексам будут 0, 1 и 2.
Длина или размер массива
В Perl нет специальной функции, чтобы получить размер массива, но есть несколько способов узнать эту величину. Например, размер массива всегда на один больше, чем старший индекс. В приведенном примере размером или длиной массива было бы $#names+1.
Кроме того, для получения размера массива можно использовать функцию scalar:
my @names = ("Foo", "Bar", "Baz"); say scalar @names;
Выведет 3.
Функция scalar это функция приведения, которая, среди прочего, превращает массив в скаляр. По произвольному, но мудрому решению, это преобразование выдает размер массива.
Индексы массива в цикле
В некоторых случаях обхода значений массива в цикле будет недостаточно. Нам может понадобиться и значение, и индекс. В этом случае нужно обойти в цикле индексы массива и получить с их помощью значения:
my @names = ("Foo", "Bar", "Baz"); foreach my $i (0 .. $#names) { say "$i - $names[$i]"; }
выведет:
0 - Foo 1 - Bar 2 - Baz
push в массивах Perl
Функция push добавляет новое значение в конец массива, расширяя его:
my @names = ("Foo", "Bar", "Baz"); push @names, 'Moo'; say Dumper \@names;
Результат выполнения кода:
$VAR1 = [ 'Foo', 'Bar', 'Baz', 'Moo' ];
pop в массивах Perl
Функция pop извлекает последний элемент из массива:
my @names = ("Foo", "Bar", "Baz"); my $last_value = pop @names; say "Last: $last_value"; say Dumper \@names;
Результат выполнения кода:
Last: Baz $VAR1 = [ 'Foo', 'Bar', ];
shift в массивах Perl
Функция shift возвращает первый элемент массива и сдвигает остальные элементы влево.
my @names = ("Foo", "Bar", "Baz"); my $first_value = shift @names; say "First: $first_value"; say Dumper \@names;
Результат выполнения кода:
First: Foo $VAR1 = [ 'Bar', 'Baz', ];

Published on 2013-12-21