CGIでも気軽にdie
eval
で囲んだ中なら、die
やcroak
などの例外が発生したときに、それを捕まえられます。
CGIでも気軽にエラーを出せて便利です。
サンプルコード
#!/usr/bin/perl use strict; eval { # トラップしたい処理 die("コケました"); }; # エラーがあれば if ($@) { # 例えば単純にブラウザに出力してみる print <<EOM; Content-type: text/html <html> <head><title>error</title></head> <body> <h1>error</h1> <p>$@</p> </body> EOM } exit;
特殊変数$@
には、最後に実行したeval
内で発生した例外エラーメッセージがセットされます。
エラーが発生しなかったときは、必ずundef
がセットされるので、if ($@) { エラー処理 }
が常套句。
変数$@
が分かりづらいなら、use English
を使うと$EVAL_ERROR
という分かりやすい変数名を設定してくれます。Englishは標準モジュールなので、追加インストールなしで使える可能性大です。
#!/usr/bin/perl use strict; use English; eval { die("コケました"); }; if ($EVAL_ERROR) { #エラー処理 } exit;
お気づきかと思いますが、evalは命令文なので、末尾にセミコロン;が無いとコンパイルエラーです。
あと、当然ながら、エラー処理内で発生した例外は捕まえられません。あまり複雑な処理を入れないほうが無難かと。
テスト中、単にエラーをブラウザに表示するだけなら、CGI::CarpモジュールのfatalsToBlowserでも用が足りますね。
evalを使うメリットは、エラー画面の見栄えをいくらか良くしたり、内容によっては表示せずに済ませたり、管理者にエラーメールを送ったりなど、エラーに対して任意のコントロールができるあたりでしょうか。
最終更新日:2012/10/22
[ ページ先頭へ ]