Perlのevalステートメントを使用して、未定義の引数でメソッドを呼び出そうとする例外を含む例外をキャッチできます。
eval {
say $shop->ShopperDueDate->day_name();
};
eval評価された最後のステートメントが返されるため、または失敗undefした場合は、次のような変数に曜日名を記録できます。
my $day_name = eval { $shop->ShopperDueDate->day_name(); };
実際に例外を検査したい場合は、特別な変数を調べることができます$@。これは通常、Perlの組み込み例外の単純な文字列ですが、例外がautodieまたはオブジェクト例外を使用する他のコードから発生した場合は、完全な例外オブジェクトになる可能性があります。
eval {
say $shop->ShopperDueDate->day_name();
};
if ($@) {
say "The error was: $@";
}
evalブロックを使用して一連のコマンドをつなぎ合わせることができます。以下は、検索時に例外がスローされていない場合にのみ、週末かどうかを確認します$day_name。
eval {
my $day_name = $shop->ShopperDueDate->day_name();
if ($day_name ~~ [ 'Saturday', 'Sunday' ] ) {
say "I like weekends";
}
};
他の言語evalと同じであると考えることができます。try実際、CPANのErrorモジュールを使用している場合は、それを綴ることもできますtry。また、evalのブロック形式(上記で説明しました)にはパフォーマンスのペナルティがなく、残りのコードと一緒にコンパイルされることにも注意してください。の文字列形式eval(私は示していません)はまったく別の獣であり、使用する場合は控えめに使用する必要があります。
eval技術的にはPerlのステートメントと見なされているため、ブロックの最後にセミコロンが表示される数少ない場所の1つです。eval定期的に使用しないと、これらを忘れがちです。
ポール