我有一个使用已安装软件包的Perl脚本。一个是Perl包,另一个是Perl XS包。
现在我想调用这个脚本,但是使用未安装的软件包,而是使用路径名称相同的软件包。
我使用了perl -I /home/.../lib script.pl
,但它不起作用
我该怎么做?
答案 0 :(得分:5)
有关影响模块加载位置的各种方法,请查看此SO帖子:
答案 1 :(得分:1)
您可以使用lib
pragma将目录添加到perl
用于查找模块的路径中。
因此,如果默认目录中安装了名为Foo
的模块,并且/home/cowens/perl5
中安装了不同的版本,则可以说
use lib "/home/cowens/perl5";
use Foo;
和perl
会在/home/cowens/perl5
中找到该版本。
答案 2 :(得分:1)
您能否向我们展示您要存储要使用的模块的目录的递归列表? ls -R
可以帮助我们确定您是否拥有正确的路径。
当您使用-I
开关时,您必须确保在那里获得正确的路径。如果您使用模块:
use Some::Module;
Perl实际上寻找:
$lib/Some/Module.pm
$lib
是@INC
中的目录之一。另一种说法是,如果特定目录不在@INC
中,Perl就不会查看它。这意味着Perl不会自动查找子目录
如果你的模块不在那个位置,Perl就不会在那个$lib
里翻找它来寻找它。您的XS模块可能没有这样存储。它可能在路径中有Perl版本和archtype,因此您可以在以下位置找到它:
$lib/5.10.1/darwin-2level/Some/Module.pm
如果您使用的是-I
,则需要自行添加这些路径。
但是,您可以在命令行上加载模块。使用lib
会更容易,它会为您添加额外的目录:
perl -Mlib=/path/to/lib ...