Is `eval`ing in a CPAN module without localizing $@ a bug?
- by rassie
I think I've encountered a bug in Params::Validate, but I'm not sure whether I identified the problematic code piece correctly. The code in question failed to pass exceptions up the chain (using Try::Tiny), so I started debugging and found out that a class used inside the try block has a destructor. This destructor calls object methods which use Params::Validate and looking into Validate.pm source I see an eval without $@ localization, i.e. the global $@ gets overwritten.
Now I see two options:
Params::Validate should always localize $@ and thus it's a bug that should be reported.
The bug is in the class in question, because it shouldn't use Params::Validate in a destructor. Params::Validate can stay as it is now.
Which one is it? How I should I handle this situation?
PS: I think that CPAN modules should be rock-solid and neither break themselves nor their environment, hence the question title.