【发布时间】:2011-07-07 13:28:41
【问题描述】:
我有一个 perl 脚本;在我的个人机器上,运行完全相同版本的 perl (5.10.1),它运行得非常好。但是,在服务器机器上,它不仅不运行,而且给了我奇怪的错误。直到最近它运行良好,我确实检查了所需的软件包是否已安装。
脚本的开头(阻塞的地方):
#!/usr/bin/perl
package Hermes;
$VERSION = 3.5;
use FindBin qw($Bin);
push @INC,$Bin;
push @INC ,"/usr/local/lib/perl5/site_perl/5.10.1/";
require("Hermes_config.pm");
$install_Directory = $Config::install_Directory;
push @INC,$install_Directory; #Fix for running from rc.local
use warnings;
#use strict;
use Safe;
use POE;
use POE::Component::IRC;
use Module::Reload;
use Math::Expression::Evaluator;
输出:
Hermes3.0/hermes3.5.pl: 17: package: not found
Hermes3.0/hermes3.5.pl: 18: =: not found
Hermes3.0/hermes3.5.pl: 20: Syntax error: "(" unexpected
(在程序开始之前有 15 行注释的开源版权声明,因此是行号)。
安装了 POE、Module::Reload 和 Math::Expression::Evaluator(根据 instmodsh),cpan 告诉我 FindBin 是最新的,重新安装 Safe 没有帮助,所以它似乎没有一个丢失的包 - 除此之外,它并没有告诉我丢失的包名称,它似乎被“包”这个词窒息。重新安装 Perl 没有帮助(使用 apt-get install --reinstall perl)。
我最近升级了本机的ubuntu版本;很有可能把事情搞砸了,所以任何关于从哪里开始寻找的提示都将不胜感激。
【问题讨论】:
-
顺便说一句:您可以通过 perldiag 了解此类错误:perldoc.perl.org/perldiag.html。寻找“未找到”。
-
"push @INC" 不应在前 2 种情况下使用,请参阅 "lib" pragma。
-
这些不是 perl 的错误。 :)
-
那里的 lib pragma 有点棘手,因为您必须加载 Hermes_config.pm 才能获得 $Config::install_Directory。我猜你可以将它包装在一个 BEGIN 中,但更好的方法是使用真正的配置文件并设置环境,这样你就不会玩那些游戏了。 :)
标签: perl