perl での例外処理の eval ブロックの最後に 1 が表示されるのを見てきました。なぜそれが必要なのですか?eval ブロックが false を返すとどうなりますか?
$@ を直接使用せず、CPAN のライブラリを使用して例外処理を行う場合でも、これは必要ですか?
perl での例外処理の eval ブロックの最後に 1 が表示されるのを見てきました。なぜそれが必要なのですか?eval ブロックが false を返すとどうなりますか?
$@ を直接使用せず、CPAN のライブラリを使用して例外処理を行う場合でも、これは必要ですか?
その false 値は によって返されeval
ます。
必須ではありません。
my $foo = eval { foo() };
$foo
例外で undef であっても問題ない場合は、まったく問題ありません。
あなたが見たものは
if (!eval { foo(); 1 }) {
...
}
コードは true を返しif
、eval
成功したことを知らせます。eval
例外では false を返します。
池上の答えを拡張するには: ほとんどの人は次のようなコードを書きます:
eval { might_throw_exception() };
if ($@) { ... }
これは 5.14 より前では間違っています。なぜなら、$@
たとえデストラクタによる上書きやその他の要因によって例外がスローされたとしても、真の値ではない可能性があるからです。return 1
回避策です。完全な説明については、 Try::Tinyを参照してください。