我正在尝试将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);
以下是我所做的事情:
我已在how to troubleshoot your CGI script检查了以下页面,但没有解决问题。
我已经检查过我的电脑的perl版本是一样的 用于我发送脚本的软件。我猜是的 这是一个问题,我无法运行该脚本 来自commnad行。
我使用相同的基本html代码运行了一个简单的Perl CGI(hello world)脚本,所以我猜这意味着我没有把cgi文件(或访问它们)放在错误的地方。
我正在完成这项任务的最后期限,并且应该考虑应该采取什么方法来解决这个问题。我是Perl的新手。任何有关我应该阅读以解决问题的线索都将非常感激。我无法分享代码,因为其中很多都是专有的。
答案 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 的有价值的输入,那将无法实现。
关于可存储模块:在阅读了这两个答案之后,我注意到我的电脑有两个版本 Perl的。我删除了其中一个。这让我围绕着这个可存储的对象 版本1.012与$ Storable :: VERSION"不匹配错误。听起来很蹩脚,我知道。但我想我还是应该让你知道。但是之后 我遇到了另一组问题。这个:
无法找到 @INC中的AJE / Constants.pm(@INC包含:C:/ Perl / lib C:/ Perl / site / lib。)
从与perl环境的@INC比较 命令行(我发现this SO post非常有用),我 注意到我的Web服务器正在使用的@INC(仅包含如上所示的2个目录)不包含 命令行perl环境的@INC中的许多目录。这是 cjm 的话回复给我的地方!然后我使用use lib在我的文件中添加这些文件 perl脚本,这解决了问题!
感谢您的帮助!