为什么perl调试器找不到脚本找到的模块?
使用CPAN,我已经安装了GD :: Graph来制作水平堆叠条形图。 CPAN将模块安装在/root/.cpan/build/GD-2.45-4PSn9K中,该文件不在@INC中。在我的脚本中,我可以通过添加为什么perl调试器找不到脚本找到的模块?
use lib "/root/.cpan/build/GD-2.45-4PSn9K"
脚本现在生成没有问题的图表。我想使用perl调试器(“perl -d myscript.pl”),但它抱怨无法找到GD.pm(位于该路径中)。我添加了PERL5LIB的路径,用“perl -V”验证,但调试器仍然找不到它。
也许一种解决方法是将GD安装在@INC路径之一中,但是a)我不知道该怎么做,以及b)我真的很想知道发生了什么。
这是在Fedora Core 12
我不知道是否有差别,但GD ::图是由我的主脚本包括一个模块中实际使用。主脚本不使用它。
更新:以下建议,我重新输入CPAN并强制安装。 CPAN表示它在/root/.cpan/(etc)中找到了安装,并在@INC前面指出了该路径。然后,我从.cpan目录手动删除GD,然后再次安装。这次CPAN把它放在同一个地方,并且还放在/usr/local/lib/perl5/GD-2.45PSn9K“。它将两条路径都加入@INC。我已经验证它在那里,并且perl调试器声称寻找在那里,但仍然找不到GD.pm(这为有)并不会运行脚本
@INC:
/usr/local/lib/perl5/GD-2.45-4PSn9K/
(and others)
在Perl -d:
Can't locate loadable object for module GD in @INC (@INC contains:
...并列出其中的路径。它确实在那里:
[root /]# find . -name "GD.pm"
./usr/local/lib/perl5/GD-2.45-4PSn9K/GD.pm
./usr/local/lib/perl5/GD-2.45-4PSn9K/blib/lib/GD.pm
(and the /root/.cpan paths)
在Bourne兼容:
export PERL5LIB=$PERL5LIB:/root/.cpan/build/GD-2.45-4PSn9K
这不是最好的解决方案。您应该通过cpan
实际安装。如果它工作正常,不会安装,那么你可能需要force
它。
force install GD::Graph
而且还有
perl -I/root/.cpan/build/GD-2.45-4PSn9K -d myscript.pl
@ jasper77:它可能无法通过测试,或者在发布开发人员放入的某些不太健壮的情况下插入。 – Axeman 2010-12-16 14:49:07
不要使用地点 - cpan
可能会丢掉很快(埃里克在他的评论中提到的,这只是一个build目录,而这些得到清理过了一段时间)。
如果你可以从你的脚本访问它没有这种use lib
行,您可以通过
use GD;
warn $INC{"GD.pm"};
找到其他(大概正确安装)版本还是看@INC路径,以了解潜在的地方它可能藏
warn join, "\n", @INC;
史努比的perldoc lm
招也不错,但如果你有其他事情在脚本@INC打可能不完全准确。
如果你需要一个use lib
线让它在脚本版本工作,那么想必没有正确安装,以便斧头兵的force install
建议可能是值得一试(这应该告诉你,它是把文件)。
强制安装只会导致/root/.cpan位置被预置为PERL5LIB,而不是安装到不同的位置。所以我从那里删除它,并再次尝试安装,这次强制它。 CPAN把它放回原处。如果cpan将这个位置扔掉,我该怎么办? – jasper77 2010-12-16 14:49:20
这是一个CPAN构建目录,它也应该在'PERL5LIB'中安装文件。 CPAN在编译结束时列出它安装文件的目录 – 2010-12-15 22:20:49
您也可以尝试'perldoc -lm GD :: Graph'来查找安装的位置。 – dwarring 2010-12-15 22:24:35