duplicate な exception は
exception::tiny を最近は使ってるので、 myapp::exception が exception::tiny を継承してるとして
package MyApp::DuplicateException; use parent qw(MyApp::Exception); sub caught { my ($class, $e) = @_; $e =~ /DBD::mysql::st execute failed: Duplicate/ ? $e : undef; } 1;
とかやると
try { # do something to db } catch { if ( MyApp::DuplicateException->caught($_) ) { # do something } else { } };
みたいな感じで分かりやすいかなと思ったけど、 caught の挙動をデフォルトと変えてるのはいけてないのでは ??? duplicate な時に db 回りの module 側で duplicate な exception を吐いたほうがいいのでは ??? みたいなのはそんぐむーさんがきっと書いてくれます。