[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] この動作は仕様だと思います。