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モジュール

Carp - perldoc.perl.org

エラーメッセージにスタック情報まで含めて表示してくれるモジュール. エラーが発生した実行文脈がわかる. 例えば,ある関数内でエラーが発生した場合,その呼出元情報とか.

基本的な関数は die() に対応する croak()warn() に対応する carp() の二つ. 他にもフルにスタックをトレースする confess()cluck() などがある.