4

perl での例外処理の eval ブロッ​​クの最後に 1 が表示されるのを見てきました。なぜそれが必要なのですか?eval ブロッ​​クが false を返すとどうなりますか?

$@ を直接使用せず、CPAN のライブラリを使用して例外処理を行う場合でも、これは必要ですか?

4

2 に答える 2

6

eval ブロッ​​クが false を返すとどうなりますか?

その false 値は によって返されevalます。

なぜそれが必要なのですか?

必須ではありません。

my $foo = eval { foo() };

$foo例外で undef であっても問題ない場合は、まったく問題ありません。

あなたが見たものは

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

コードは true を返しifeval成功したことを知らせます。eval例外では false を返します。

于 2013-02-24T09:35:46.253 に答える
0

池上の答えを拡張するには: ほとんどの人は次のようなコードを書きます:

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

これは 5.14 より前では間違っています。なぜなら、$@たとえデストラクタによる上書きやその他の要因によって例外がスローされたとしても、真の値ではない可能性があるからです。return 1回避策です。完全な説明については、 Try::Tinyを参照してください。

于 2013-02-24T10:46:04.077 に答える