The consensus of the Perl community seems to be that Try::Tiny is the preferred way to handle exceptions.
Perl 5.14 (which is the version I use) seems to solve the
Either do:
local $@; eval { … }
… to prevent changes to $@ from affecting global scope, or use Try::Tiny.
Syntactically, there are situations where I prefer one or the other.