最近のPerl例外厨事情
言及してくれていたのをずっと放置していた。
http://soh335.hatenablog.com/entry/2013/06/04/114954
最近結構例外厨で、事あるごとに例外投げたくなってる。結局エラー文字列を正規表現で引っ掛けるより、オブジェクトで引っ掛けたほうがエラーメッセージとかが変わった時に対応が少なくて楽だし、例外を階層化して置いたほうが色々捗る感じがしているので、丁寧に例外オブジェクト投げるように色々ラップしたほうが良いなーとか思ってる。
他言語の人にとっては何を今更みたいな話かもしれませんね。
例えば、Tengの場合だとこんな感じで、Tengはエラー投げるところがhandle_error()
で一本化されているので、そこをオーバーライドすれば自分の好みの例外を投げ分けるとかができる。この場合だとユニークキー制約に引っかかった場合は異なる例外を投げるようにしてある。MyApp::ExceptionはException::Tinyを継承している。
Data::Validator使う時もこんな具合で、ラップして独自の例外オブジェクトを投げるようにしてる。
ただ、どれだけ頑張ってラップしても、例外に文字列が入ってくることは避けられないので、なかなか統一的なインターフェースで扱うのが難しくて、泥臭い分岐を書く事にはなってしまう。