为什么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) 
+0

这是一个CPAN构建目录,它也应该在'PERL5LIB'中安装文件。 CPAN在编译结束时列出它安装文件的目录 – 2010-12-15 22:20:49

+3

您也可以尝试'perldoc -lm GD :: Graph'来查找安装的位置。 – dwarring 2010-12-15 22:24:35

在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 
+0

@ 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建议可能是值得一试(这应该告诉你,它是把文件)。

+0

强制安装只会导致/root/.cpan位置被预置为PERL5LIB,而不是安装到不同的位置。所以我从那里删除它,并再次尝试安装,这次强制它。 CPAN把它放回原处。如果cpan将这个位置扔掉,我该怎么办? – jasper77 2010-12-16 14:49:20