想定外エラーはevalでキャッチ!
たとえば、PerlでCGIプログラムを組んでいるとします。
ご存知のようにWeb系では想定外のエラーが頻発します。
しかし、ブラウザにはCGIエラーと出るだけで、何のエラーで、何ライン(プログラムソース)で発生したかが分かりません。
そんな時は、ソースをまるごとevalブロックにしてしまうのです。
すると、想定外エラーをキャッチすることができるのです。
また、想定外エラーメッセージは特殊変数『$@』へ入ります。
しかも、プログラムソースの何ラインで発生したかも入っていますよ!
つまり、何のエラーで、何ラインでエラーが起きたのかが分かるのです。
eval { # 本来のCGIの処理をここに書きます。 }; if ($@) { print "Content-type: text/html\n\n"; print "<html><body><h1>想定外エラー($@)</h1></body></html>\n"; }
補足:
evalブロックは、ブロックだけど実行文でもあるので、閉じ中カッコのあとにセミコロンが必要です。
また、想定外エラーの時は、$@にエラー文字列がセットされるので真となり、エラーでない時は、未定義なので偽となります。