あなたがやろうとしていること - エラーを無視し、どんな犠牲を払っても続行する - は非常に疑わしい慣行であり、プログラムを未定義の状態にする可能性があり、実際のバグを見つけるのをさらに難しくします.
理論的には、サブルーチンをオーバーライドして Perl コードからの例外をキャッチすることもできますが、実数は引き続きサブルーチンとして使用でき、これは XS コードまたは perl 自体からのエラーをトラップしません (を使用する場合とは異なります)。一部のモジュールでは制御フローにandが使用されることに注意してください。次のコードを検討してください。CORE::GLOBAL::die
die
CORE::die
eval
die
warn
sub foo {
my ($x, $y) = @_;
croak "X must be smaller than Y" unless $x < $y;
return $y - $x;
}
die
が になると、warn
その関数は負の数を出力し始め、あらゆる種類の大混乱を引き起こします (たとえば、配列インデックスに使用された場合) 。
解決策をそのまま使用eval
するか、さらに良いことに、に移行してくださいTry::Tiny
。致命的なエラーには理由があります。
高い信頼性が必要な場合は、Erlang に似たモデル (ワーカー プロセスのプール) を採用することをお勧めします。エラーが発生した場合、そのプロセスは強制終了され、代わりのプロセスが開始されます。