gpt4 book ai didi

perl - CPAN 模块中的 `eval` ing 没有本地化 $@ 是一个错误吗?

转载 作者:行者123 更新时间:2023-12-03 03:32:33 25 4
gpt4 key购买 nike

我认为我在 Params::Validate 中遇到了错误,但我不确定我是否正确识别了有问题的代码段。有问题的代码未能将异常传递到链上(使用 Try::Tiny ),因此我开始调试并发现 try block 内使用的类具有析构函数。此析构函数调用使用 Params::Validate 的对象方法并查看 Validate.pm source我看到一个没有 $@ 本地化的 eval,即全局 $@ 被覆盖。

现在我看到两个选项:

  1. Params::Validate 应始终本地化 $@,因此这是一个应该报告的错误。
  2. 该错误存在于相关类中,因为它不应在析构函数中使用 Params::ValidateParams::Validate 可以保持原样。

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

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

最佳答案

参见http://search.cpan.org/perldoc?Params::Validate#SUPPORT了解如何提交错误报告。您花费了大量的精力来发现问题的原因和解决方案。如果其他人在不知道您已经学到了什么的情况下不得不追溯您的脚步,那将是一种耻辱。

I think that CPAN modules should be rock-solid and neither break themselves nor their environment

在一个完美的世界中,软件总是会做它声称要做的事情,并且不会有任何未记录的副作用。 CPAN 是一个非常开放的系统,因此几乎任何人都可以上传几乎任何内容。我认为这更多的是一个特性而不是一个错误 —— 较低的进入阈值使得开发 Perl 模块变得更容易,并鼓励开发更广泛、更有用的库。

Params::Validate 于九年前发布,此后已更新约 94 次。如果您查看 CHANGES 文件,您会发现作者非常认真地保持模块最新并修复偶尔出现的问题以及添加新功能。听到用户发现问题可能不会让他们感到震惊,您也不应该因为发现某些库仅仅是优秀而不完美而感到太震惊。

关于perl - CPAN 模块中的 `eval` ing 没有本地化 $@ 是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2949622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com