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