はい、問題は私が使用しているライブラリにあります。いいえ、変更できません。回避策が必要です。
基本的に、私は、ファイルの読み取り中に特定のエラー状態が発生したときに「die」で終了する、不適切に作成された Perl ライブラリを扱っています。私はこのルーチンを何千ものファイルをループしているプログラムから呼び出していますが、そのうちのいくつかは悪いものです。不良ファイルが発生します。ルーチンでエラーをログに記録して先に進みたいだけです。
ライブラリを変更できる場合は、単に変更します
die "error";
に
print "error";return;
、 でもできないんです。不良ファイルがプロセス全体をクラッシュさせないように、ルーチンを修正する方法はありますか?
フォローアップの質問: 「eval」を使用してクラッシュしやすい呼び出しをうまく機能させますが、そのフレームワーク内でキャッチ可能なエラーの処理をどのように設定すればよいですか? 記述するために:
私はライブラリを呼び出すサブルーチンを持っています-それは時々クラッシュします-何度も。このサブルーチン内の各呼び出しを eval{} で解決するのではなく、終了させて、サブルーチンを呼び出すレベルで eval{} を使用します。
my $status=eval{function($param);};
unless($status){print $@; next;}; # print error and go to next file if function() fails
ただし、function() でキャッチできるエラー条件があります。キャッチされたエラーとキャッチされていないエラーの両方に対して正しい動作を得るために、サブルーチンと呼び出しルーチンでエラーキャッチを設計する最も適切でエレガントな方法は何ですか?