Error

本項は歴史的事項を説明しています。本項の内容の一部または全部は、現在の状況とは異なるかもしれません。

(なお本項の内容の一部または全部は、互換性または歴史的連続性のために現在も有効な場合もあります。しかし新たに利用することは避けるべきです。)

Error モジュール (Perl)

[1] 誤りを投げた try 塊やそれよりも内側の塊を字句適用範囲とする変数が消滅するのに伴って DESTROY が自動的に呼出され、その中でも誤りが投げられることがあると、 誤りが乗っ取られて何が起きているのか分かりにくくなってしまうので注意が必要です。

例えば、単純化した次の code をみてください。

try {
  my $test = bless {}, 'test';
  throw Error::Simple 'try';
} catch Error::Simple with {
  die shift->stringify;
};

sub test::DESTROY {
  throw Error::Simple 'DESTROY';
}
これを実行すると DESTROY とだけ出て死にます。

[2] この動作は仕様だと思います。