2

我正在尝试将 Perl 脚本作为 CGI 脚本运行。当我从 cmd 行运行 perl 脚本时,它运行得非常好,但是当我从浏览器运行它时,它显示以下错误。

Storable object version 1.012 does not match $Storable::VERSION 1.010 at
C:/Perl/lib/DynaLoader.pm line 225.
Compilation failed in require at C:/Perl/site/lib/AsiaXMLUtils.pm line 20.
BEGIN failed--compilation aborted at C:/Perl/site/lib/AsiaXMLUtils.pm line 20

相关的 perl 脚本基本上被设计为将一些作业排队到远程软件。如果它响铃,上述文件中的第 20 行是:

use Storable qw(&retrieve &store);

以下是我所做的事情:

  1. 我已经检查了以下有关如何排除 CGI 脚本故障的页面,但还没有解决这个问题。

  2. 我检查了我的 PC 的 perl 版本是否与我发送脚本的软件相同。我想这是一个问题,我也无法从命令行运行脚本。

  3. 我已经使用相同的基本 html 代码运行了一个简单的 Perl CGI(hello world)脚本,所以我想这意味着我没有将 cgi 文件(或访问它们)放在错误的位置。

我正在为完成这项任务设定最后期限,我想应该问我应该采取什么方法来解决这样的问题。我是 Perl 的新手。任何关于我应该阅读以解决问题的线索将不胜感激。无论如何,我不能共享代码,因为其中大部分是专有的。

4

3 回答 3

2

Storable 是一个 XS 模块,这意味着它在 Storable.dll(或 Unix 上的 Storable.so)中具有 C 代码,在 Storable.pm 中具有 Perl 代码。该错误表明 Storable.dll 的版本(“Storable object version 1.012”)与 Storable.pm(“$Storable::VERSION 1.010”)不匹配。如果您可以从命令行运行脚本,这意味着您的网络服务器正在使用不同版本的 Perl,或者@INC不同,或者您的网络服务器目录中可能有一个额外的 Storable.dll。

于 2013-05-31T07:31:22.940 回答
1

尝试使用nstore而不是store. 这样,您的文件将是跨平台的。另外,尝试重新安装 Store 模块。

于 2013-05-31T06:38:40.430 回答
0

以下是我解决问题的方法,顺便说一句,如果没有Miguel Przcjm的宝贵意见,这是不可能的。

  1. 关于可存储模块:阅读两个答案后,我注意到我的电脑有两个版本的 Perl。我删除了其中一个。这让我遇到了“可存储对象版本 1.012 与 $Storable::VERSION 不匹配”错误。听起来很蹩脚,我知道。但我想我还是应该让你知道。但后来我遇到了另一组问题。这个 :

    无法在 @INC 中找到 AJE/Constants.pm(@INC 包含:C:/Perl/lib C:/Perl/site/lib。)

  2. 通过从命令行与 perl 环境的 @INC 进行比较(我发现这篇 SO 帖子非常有用),我注意到我的 Web 服务器正在使用的 @INC(如上所示仅由 2 个目录组成)没有在命令行 perl 环境的 @INC 中包含许多目录。这就是cjm的话回到我身边的地方!然后我使用use lib在我的 perl 脚本中添加这些文件,这解决了问题!

谢谢大家的帮助!

于 2013-05-31T14:27:26.313 回答