В этой части Учебника 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',
];