eval { doSomething(); }; if ( $@ ) { if ( $@->isa('my::own::error') ) { warn("Error occurred but may continue: $@"); } else { # Catch other thrown errors, die, croak etc. die(ref $@ ? $@->stacktrace() : $@); } }