There is now https://metacpan.org/pod/Syntax::Keyword::Try which may allow you to set up your logic in a much cleaner way. In particular, it explicitly supports next/etc as well as return applied to the enclosing stack, unlike eval.
Comment on Re^2: Exiting eval via next: is that so bad?