Обработка исключений в perl



Я видел, как 1 появляется в конце блоков eval для обработки исключений в perl. Почему это необходимо? Что происходит, если блок eval возвращает false?



Требуется ли это, даже если мы не используем $@ напрямую, а какую-то библиотеку из CPAN для обработки исключений?

534   2  

2 ответов:

Что происходит, если блок eval возвращает false?

Это ложное значение возвращается eval.

Почему это необходимо?

Это не требуется.

my $foo = eval { foo() };

Прекрасно, если вы согласны с тем, что $foo не является исключением.

То, что вы видели, это

if (!eval { foo(); 1 }) {
   ...
}

Код возвращает true, чтобы if знал, что eval удалось. eval вернет false при исключении.

Чтобы расширить ответ Икегами: большинство людей пишут такой код:

eval { might_throw_exception() };
if ($@) { ... }

Это неверно до 5.14, потому что $@ не может быть истинным значением, даже если исключение было вызвано перезаписывающим его деструктором или другими факторами. return 1 - это обходной путь; смотрите Try::Tiny для полного объяснения.

Comments

    Ничего не найдено.