Perlのエラー処理
Perlのエラー処理について.
eval {...}; if ($@) ...
Perl でエラーを処理するための一番メジャーな方法.
eval {...}
はブロック内で発生した例外をトラップし,
エラーメッセージを特殊変数 $@
に格納する.
この動作は,プログラムを異常終了させずにエラーを処理したい場合に利用できる.
例えば,不正な日付データに対するエラー処理.
eval "DateTime->new(year => $y, month => $m, day => $d);"; if ($@ =~ /'year' parameter/) { warn "INVALID YEAR: $@"; } elsif ($@ =~ /'month' parameter/) { warn "INVALID MONTH: $@"; } elsif ($@ =~ /'day' parameter/) { warn "INVALID DAY: $@"; } elsif ($@) { warn "FAILED TO VALIDATE: $@"; }
Errorモジュール
Error - Error/exception handling in an OO-ish way
Error モジュールを使うと,try catch 構文が Perl でも使えるようになる. でも,標準じゃないモジュールでエラー処理するのってどうよと言う人もいるので,保留.
Carpモジュール
エラーメッセージにスタック情報まで含めて表示してくれるモジュール. エラーが発生した実行文脈がわかる. 例えば,ある関数内でエラーが発生した場合,その呼出元情報とか.
基本的な関数は
die()
に対応する croak()
と warn()
に対応する carp()
の二つ.
他にもフルにスタックをトレースする confess()
や cluck()
などがある.