This is the built-in way to deal with "exceptions" without relying on third party libraries like Try::Tiny.
my $ret;
eval {
$ret = some_function_that_might_die();
1;
} or do {
my $eval_error = $@ || "Zombie error!";
handle_error($eval_error);
};
# use $ret
...