perlメモ:evalを使ったエラートラップ

perlでプログラムを作成する時に外部提供されているライブラリを利用することが有りますが、このライブラリの中で死んでしまって、internal server error 500になってしまう場合があります。
これは困るんですよね、戻り値でエラーチェックしているだけだと、エラーをトラップできないのでinternal server error 500になって激しくかっこ悪いのです。しかもperlの文法チェックではエラーがでないのでどこでエラーが起きているのか探すのが面倒です。
昔internal server errorを「インターナショナル・サーバー・エラー」と読んだ人がいて、「どんだけ国際的なエラーやねん!!wwwww」と吹いた覚えがあります。
さて、それは置いといてinternal server error 500は致命的ですので何とかそうならないようにエラーをトラップしてあげたいわけですがそこでevalを使うわけです。
難しいことは解説しませんが、(判らないのでw)とにかく下記の様な感じで使います

eval{
hogehoge(); #何らかの関数
};
if($@){
print $@;
}

つまり
eval{ };
でトラップしたいところを囲んであげれば、呼び出した関数の中で死んでも、プログラム自体はinternal server errorで停止してしまうことは無くevalを抜けてきます。そして$@の中にエラーコード等が入ってくるので、これをチェックしてエラーチェックを行う事が出来ます。

タグ :