从cmd行运行Perl脚本作为CGI脚本

时间:2013-05-31 06:26:19

标签: perl cgi

我正在尝试将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. 我已在how to troubleshoot your CGI script检查了以下页面,但没有解决问题。

  2. 我已经检查过我的电脑的perl版本是一样的 用于我发送脚本的软件。我猜是的 这是一个问题,我无法运行该脚本 来自commnad行。

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

  4. 我正在完成这项任务的最后期限,并且应该考虑应该采取什么方法来解决这个问题。我是Perl的新手。任何有关我应该阅读以解决问题的线索都将非常感激。我无法分享代码,因为其中很多都是专有的。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

以下是我能够解决问题的方法,如果没有 Miguel Prz cjm 的有价值的输入,那将无法实现。

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

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

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

  3. 感谢您的帮助!