Что такое @$ в Perl?
Я сталкивался с этим, ожидая, что это будет опечатка для $@
:
use strict;
use warnings;
eval {
my $error = Not::Here->new();
};
warn @$;
И к моему удивлению это выводит это:
Не удается найти метод объекта "new" с помощью пакета "Not::Here" (возможно, вы забыли загрузить "Not::Here"?) В строке 6. dollar_array.pl...... пойман в строке 9 dollar_array.pl.
Я не могу найти информацию о @$
, и он не указан ни в perlvar, ни в eval
Так как выходной шоу caught at ...
Похоже, что это что-то в обработке исключений Perl.
1 ответ
@$
не имеет смысла (пока) в Perl. Существует потому что $$
существует (для каждой специальной переменной "sigil-char" существуют все остальные переменные "another_sigil-char"). Следовательно, warn
не получает аргументов - вы можете проверить это, используя только warn;
- вы получите тот же результат.
Теперь давайте прочитаем документацию для warn:
Если вывод пуст и
$@
уже содержит значение (обычно из предыдущего eval), которое используется после добавления"\t...caught"
в$@
, Это полезно для того, чтобы остаться почти, но не совсем похоже наdie
,
$@
содержит исключение из eval
, так что поведение ожидается.