2010-06-01 59 views
12

我想我在Params::Validate中遇到过一个错误,但我不确定我是否正确识别了有问题的代码段。上述代码未能通过链上的异常(使用Try::Tiny),所以我开始调试并发现在try块中使用的类具有析构函数。这个析构函数调用使用Params::Validate和调查Validate.pmsource的对象方法我看到eval没有[email protected]本地化,即全局[email protected]被覆盖。

现在我看到两个选项:

  1. Params::Validate应始终本地化[email protected],因此它应该报告的错误。
  2. 该错误发生在相关类中,因为它不应该在析构函数中使用Params::ValidateParams::Validate可以保持现在的状态。

这是哪一个?我应该如何处理这种情况?

PS:我认为CPAN模块应该坚如磐石,既不会破坏自身也不会破坏环境,因此也就成为问题的标题。

回答

11

有关如何提交错误报告,请参阅http://search.cpan.org/perldoc?Params::Validate#SUPPORT。你花费了大量的精力来发现问题的原因和解决方案。如果别人不知道你已经学到了什么,就不得不追溯你的步骤,那将是一件耻辱。

我认为CPAN模块应该是坚如磐石的和没有打破自己和他们的环境

在一个完美的世界中,软件会永远做它声称做的,没有任何副作用无证效果。 CPAN是一个非常开放的系统,几乎任何人都可以上传几乎任何东西。我认为这更像是一个功能,而不是一个错误 - 进入门槛较低使开发Perl模块变得更容易,并且鼓励开发更多更有用的库。

Params::Validate于9年前发布,自此之后已更新约94次。如果您仔细查看CHANGES文件,您会发现作者在保持模块最新并修复偶然问题以及添加新功能方面相当认真。听到用户发现问题可能不会让他们震惊,也不应该对发现某些图书馆仅仅是出色并且不完美而感到震惊。

4

除非有一些文档告诉你模块有助于保留有意义的评估错误作为其API的一部分,这绝对是一个错误。

我认为CPAN模块应该坚如磐石,既不会破坏自己也不会破坏环境,因此也就是问题的标题。

它是否真的打破什么?我可以告诉你这是一个错误,但我不能告诉你,因为没有测试你期望得到清除的情况,所以你可以借口找你,因为没有Params::Validate。如果它“破坏”了一个开发环境,那么这就是测试的目的。

+0

确切地说,它用在我们的框架代码中,我的部门不是框架的负责人。所以,是的,缺少测试,但不是我本人或者发现问题的同事 - 他一直在测试他的代码,并想知道为什么他的例外无法传播。 – 2010-06-01 19:53:24