Linux 为什么可以';perl调试器是否找到脚本找到的模块?

Linux 为什么可以';perl调试器是否找到脚本找到的模块?,linux,perl,debugging,cpan,fedora,Linux,Perl,Debugging,Cpan,Fedora,使用CPAN,我安装了GD::Graph来制作水平堆叠条形图。CPAN在/root/.CPAN/build/GD-2.45-4PSn9K中安装了模块,该模块不在@INC中。在我的脚本中,我可以通过添加 use lib "/root/.cpan/build/GD-2.45-4PSn9K" 该脚本现在生成的图表没有任何问题。我想使用perl调试器(“perl-d myscript.pl”),但它抱怨找不到GD.pm(位于该路径中)。我添加了PERL5LIB的路径,并用“perl-V”进行了验证,但

使用CPAN,我安装了GD::Graph来制作水平堆叠条形图。CPAN在/root/.CPAN/build/GD-2.45-4PSn9K中安装了模块,该模块不在@INC中。在我的脚本中,我可以通过添加

use lib "/root/.cpan/build/GD-2.45-4PSn9K"
该脚本现在生成的图表没有任何问题。我想使用perl调试器(“perl-d myscript.pl”),但它抱怨找不到GD.pm(位于该路径中)。我添加了PERL5LIB的路径,并用“perl-V”进行了验证,但调试器仍然找不到它

也许解决这个问题的一种方法是在@INC路径中安装GD,但a)我不知道如何做到这一点,b)我真的很想了解发生了什么

这是在Fedora Core 12上

我不知道if是否起作用,但GD::Graph实际上是在我的主脚本中包含的模块中使用的。主脚本不使用它

更新:根据下面的建议,我重新进入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 compatible上:

export PERL5LIB=$PERL5LIB:/root/.cpan/build/GD-2.45-4PSn9K
这不是最好的解决方案。您应该通过
cpan
安装它。如果它工作正常并且无法安装,那么您可能需要
强制安装它

force install GD::Graph
还有

perl -I/root/.cpan/build/GD-2.45-4PSn9K -d myscript.pl

不要使用那个位置-
cpan
可能很快就会把它扔掉(正如Eric在评论中提到的,那只是一个构建目录,过一段时间这些目录就会被清理掉)

如果您可以从脚本中访问它,而无需使用
use lib
行,您可以通过

use GD;
warn $INC{"GD.pm"};
或者查看@INC路径以查看它可能隐藏的潜在位置

warn join, "\n", @INC;
史努比的
perldoclm
技巧也很好,但如果脚本中有其他与@INC有关的东西,则可能并不完全准确


如果您确实需要
use lib
行使其在脚本版本中工作,那么可能它没有正确安装,因此Axeman的
force install
建议值得一试(这应该会告诉您它将文件放在何处).

这是一个CPAN构建目录,它还应该在
PERL5LIB
中的某个位置安装文件。CPAN在构建结束时列出了它所安装文件的目录。您也可以尝试“perldoc-lm GD::Graph”来查找安装位置。@jasper77:它可能没有通过测试,或者在发布时遇到了一些不太稳定的情况se developer安装了。强制安装只会导致/root/.cpan位置预先添加到PERL5LIB,而不是安装在其他位置。因此,我从那里删除了它,并再次尝试安装,这次强制安装。cpan将其放回原来的位置。如果cpan将丢弃该位置,我该怎么办?