title: Is `eval`ing in a CPAN module without localizing $@ a bug?
body: <p>I think I've encountered a bug in <a href="http://search.cpan.org/perldoc?Params::Validate" rel="nofollow noreferrer">Params::Validate</a>, 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 <a href="http://search.cpan.org/perldoc?Try::Tiny" rel="nofollow noreferrer">Try::Tiny</a>), so I started debugging and found out that a class used inside the <code>try</code> block has a destructor. This destructor calls object methods which use <code>Params::Validate</code> and looking into <code>Validate.pm</code> <a href="http://cpansearch.perl.org/src/DROLSKY/Params-Validate-0.95/lib/Params/Validate.pm" rel="nofollow noreferrer">source</a> I see an <code>eval</code> without <code>$@</code> localization, i.e. the global <code>$@</code> gets overwritten.</p>
  
  <p>Now I see two options:</p>
  
  <ol>
  <li><code>Params::Validate</code> should always localize <code>$@</code> and thus it's a bug that should be reported.</li>
  <li>The bug is in the class in question, because it shouldn't use <code>Params::Validate</code> in a destructor. <code>Params::Validate</code> can stay as it is now.</li>
  </ol>
  
  <p>Which one is it? How I should I handle this situation?</p>
  
  <p><strong>PS:</strong> I think that CPAN modules should be rock-solid and neither break themselves nor their environment, hence the question title.</p>