最後に確認したところ、エラーは非推奨でした。しかし、そのモジュールなしでそれを行う方法は次のとおりです。
eval {
die "Oops!";
1;
} or do {
my $e = $@;
print("Something went wrong: $e\n");
};
基本的に、 の代わりに eval を使用し、 の代わりにdie をtry
使用しthrow
、 で例外を探します$@
。eval ブロックの最後の true 値は、$@
5.14 より古いバージョンの Perl で再度使用される前に意図せずに変更されるのを防ぐためのイディオムの一部です。詳細については、P::C::P::ErrorHandling::RequireCheckingReturnValueOfEvalを参照してください。たとえば、このコードにはこの欠陥があります。
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
eval {
die "Oops!";
};
if (my $e = $@) {
print("Something went wrong: $e\n");
}
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
しかし、多くの Perl 操作は失敗しても例外を発生させないことに注意してください。エラーコードを返すだけです。この動作は、組み込みおよび標準モジュールのautodieを介して変更できます。を使用している場合autodie
、try/catch を実行する標準的な方法は次のとおりです (autodie perldoc からそのまま):
use feature qw(switch);
eval {
use autodie;
open(my $fh, '<', $some_file);
my @records = <$fh>;
# Do things with @records...
close($fh);
};
given ($@) {
when (undef) { say "No error"; }
when ('open') { say "Error from open"; }
when (':io') { say "Non-open, IO error."; }
when (':all') { say "All other autodie errors." }
default { say "Not an autodie error at all." }
}
スタックトレースを取得するには、 Carp を見てください。