Что такое @$ в 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, так что поведение ожидается.

Другие вопросы по тегам