Рассмотрим следующие программы в Perl.
use strict;
use warnings;
my @foo = qw(a b c);
undef = shift @foo;
print scalar @foo;
Это будет умирать с сообщением об ошибке:
Модификация значения, доступного только для чтения,...
Использование константы даст другую ошибку:
1 = shift @foo;
Невозможно изменить постоянный элемент в скалярном задании на... Выполнение... отменено из-за ошибок компиляции.
То же самое, если мы это сделаем:
(1) = shift @foo;
Все это имеет смысл для меня. Но размещение undef
в списке будет работать.
(undef) = shift @foo;
Теперь он печатает 2
.
Конечно, это обычная практика, если у вас есть куча возвращаемых значений и нужны только конкретные, например здесь:
my (undef, undef ,$mode, undef ,$uid, $gid, undef ,$size) = stat($filename);
Пример 9-й строки кода в perldoc -f undef показывает это, но нет объяснений.
Мой вопрос: как это обрабатывается внутри Perl?