3

我正在开发一个使用Crypt::RSA的非常大的 CGI 应用程序,该应用程序已正确安装。当我尝试运行任何嵌入式库时,我收到“尝试将空引用作为函数调用”类型的错误(我现在无法返回确切的错误,因为我们必须回滚发布日期) . 我跟踪对 Crypt::RSA 构造函数的空引用,该构造函数使用Class::Loader来启用 Crypt::RSA::ES::OAEP。

我用“use”和“new”替换了类加载器,这部分工作正常,尽管库在很多方面仍然失败。显然我的环境有问题。我只是不确定是什么。谁能给我任何线索?

4

1 回答 1

2

好的,经过 12 个小时的深入研究,我得到了这个工作。

这就是发生的事情(但不是为什么)。每当我调用eval()引用userequire语句时(如发生在 Class::Loader 中,也发生在 Crypt:: 框架中的其他位置),它无法看到以其他方式包含为 Perl 类路径的路径。由于大多数引用的 use/require 对象只是假设该类将在那里,因此很少有有用的错误被抛出。我会转储@INC到文件,在 eval 块之外,一切都会在那里。

具有讽刺意味的是,我在 dev vs staging 中使用了相同的设置,它在 dev 中有效,但在 staging 中无效。我还必须指出,FindBin(我不应该在 CGI 中使用它,我知道,但 Crypt 使用它)在 /dev/null 中上下摆动,但在开发中却没有。

由于我无法轻松比较版本或全局配置,这就是我的任务结束的地方。

我在 Crypt::RSA 中为自己解决问题的方法是禁用与 FindBin 相关的所有命令,以及requir我的代码可以访问的任何内容的硬编码 e 引用。我在 Crypt::RSA 中为 Crypt::RSA::ES::OAEP 做了一个要求,在 Crypt::Random::Generator 中为 Crypt::Random::Provider::rand 做了一个要求

希望这可以帮助将来遇到问题的任何人。任何可以提出原因的人,请回复,我将添加它以完成帖子。

于 2009-01-14T18:38:33.807 回答