В Perl переменные делятся на скаляры ($), массивы (@) и хэши (%):
Скаляры ($variable) – хранят одно значение (строка, число):
my $name = "Ivan"; my $age = 30;
Массивы (@array) – набор упорядоченных элементов (индексируются числами):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Хэши (%hash) – набор пар ключ-значение (ассоциативный массив):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Обратите внимание, что для обращения к элементу используется специфический символ в зависимости от типа переменной:
$array[0] — элемент массива$hash{"key"} — значение хэша по ключуЧем отличаются выражения @array[1,2] и $array[1,2]?
Ответ:
@array[1,2]— предоставляет список с несколькими элементами массива (срез).$array[1,2]— неверно, приводит к ошибке. Для доступа к нескольким элементам массива используют только срез@array[...].Пример:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
История
В проекте логирования программист обратился к элементу хэша через
@colors{"red"}. В результате получалось не значение хэша, а случайная ошибка, потому что для одиночного значения нужен$, а не@.
История
В одном сервисе для итерации по индексам массива забыли использовать правильное обращение — вместо
$array[$i]использовали@array$i, что приводило к предупреждениям и неверным результатам.
История
В API проекте описали функцию, принимающую массив как
$args, а на вызове передавался массив без скаляра:func(@list). Оказалось, что таким образом элементы массива "раскладываются" в список, и функция работала не так, как ожидали. Правильно было принимать массив как@args.