It is possible to throw an exception which is considered false in a boolean context
Don't use
if ($@)
Use
unless defined eval { somecode(); 1; }
If a DESTROY method calls eval then an object used within your eval could potentially clobber $@.
True, well, I count it as nesting evals.
UPD:
I am not trying to tell that eval is better than Try::Tiny.
I just think that OP might want to temporary change one statement to see how it works with plain eval{}.
For cases when people use nested exceptions try/catch blocks, heavy use Exception handling pattern, heavy use OOP (with descructors), Try::Tiny is much better than eval{} (it's impossible to work with eval actually)
But there are valid cases when people don't need to use Exceptions/OOP in so heavy way. Then it's perfectly valid to simply use eval then. And learning eval gotchas is as hard as learning Try::Tiny gotchas.
|