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 を吐いたほうがいいのでは ??? みたいなのはそんぐむーさんがきっと書いてくれます。