どのように私はPerlで例外タイプをテストするのですか?
質問
どのようにスクリプトまたはeval
ブロックを終了させ、どのような例外のチェックすることができますか?
私は、エラーのタイプを知っておく必要があり、どこで例外が発生します。
解決
Perlの道
慣用的Perlは、我々はどちらかのすべてのエラーを無視するか、ログインするか、別の場所に転送するためにそれらをキャプチャしているということです。
eval { func() }; # ignore error
または
eval { func() };
if ($@) {
carp "Inner function failed: $@";
do_something_with($@);
}
または(使用して ::タイニーに試してみてください - あなたが望むかもしれない理由については、そのページを参照してくださいPerlの組み込み例外処理)の上にそれを使用します。
try { func() }
catch {
carp "Inner function failed: $_";
do_something_with($_);
};
あなたは例外の種類を確認したい場合は、使用する正規表現ます:
if ( $@ =~ /open file "(.*?)" for reading:/ ) {
# ...
}
の行およびファイルもその文字列でもある。
あなたが正確な文字列を知っている必要がありますので、これは、かなり厄介なしかしです。あなたは本当に良いエラー処理をしたい場合は、 CPANするから例外モジュールを使用します。
例外::クラス
$ @が文字列である必要はありません、それが対象となり得ます。 例外::クラスには、あなたが宣言してスロー例外がJavaスタイルオブジェクトことができます。あなたはそれを投げると、オブジェクトのメソッドではなく、正規表現の構文解析を使用して、その情報を取得するときに、エラーが発生して任意の情報(ファイル名など)を渡すことができます - のファイルと行番号例外のます。
あなたがエラー:: Exceptionを使用していないサードパーティ製のモジュールを使用している場合は、は、
考えます$SIG{__DIE__} = sub { Exception::Class::Base->throw( error => join '', @_ ); };
これは例外にすべてのエラーを変換します::クラスは、オブジェクトます。
例外のための適切な文字列化までセットする所属していません StackOverflow