Операторы pop и push

Новые элементы можно добавлять в массив, просто сохраняя их в элементах с новыми индексами. Но настоящие программисты Perl не используют индексы.3 По этой причине в нескольких ближайших разделах мы представим приемы работы с массивами без использования индексов. Массивы часто применяются для реализации стеков, в которых элементы добавляются и удаляются с конца списка (там, где у массива находится «последний» элемент с наибольшим индексом). Такие операции встречаются достаточно часто, поэтому для их выполнения были созданы специальные функции. Оператор pop удаляет из массива последний элемент и возвращает его:

@array = 5..9;
$fred = pop(@array); # $fred присваивается 9, в @array остаются
# элементы (5, 6, 7, 8)
$barney = pop @array; # $barney присваивается 8, в @array остаются
# элементы (5, 6, 7)
pop @array; # @array теперь содержит (5, 6). (Элемент 7 удален).

В последнем примере pop используется в «пустом контексте» – по сути это затейливый способ сказать, что возвращаемое выражение вообще не применяется. В подобном использовании нет ничего ошибочного, если вам требуется именно такое поведение. Если массив пуст, pop не изменяет его (так как удаляемого элемента не существует) и возвращает undef.


Вероятно, вы заметили, что pop может использоваться как с круглыми скобками, так и без них. Это общее правило в Perl: круглые скобки всегда можно убрать – кроме тех случаев, когда это изменяет смысл выражения. Обратная операция push добавляет элемент (или список элементов) в конец массива:

push(@array, 0); # @array теперь содержит (5, 6, 0)
push @array, 8; # @array теперь содержит (5, 6, 0, 8)
push @array, 1..10; # @array теперь содержит десять новых элементов
@others = qw/ 9 0 2 1 0 /;
push @array, @others; # @array теперь содержит пять новых элементов
# (итого 19)

Обратите внимание: в первом аргументе push или в единственном аргументе pop должна передаваться переменная массива. Для литеральных списков эти операции не имеют смысла.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
в списочном контексте
Главная служебная переменная: $_
Интерполяция массивов в строках
Использование выражений, создающих скаляры, в списочном контексте
Использование выражений, создающих списки, в скалярном контексте

Вернуться в раздел: Perl / 2. Списки и массивы