我有一个使用已安装软件包的Perl脚本。一个是Perl包,另一个是Perl XS包。如何将Perl模块包含与程序相关的路径?
现在我想调用此脚本,但使用未安装的包,但使用路径名称相同的包。
我以前perl -I /home/.../lib script.pl
,但它不工作
我该怎么办呢?
我有一个使用已安装软件包的Perl脚本。一个是Perl包,另一个是Perl XS包。如何将Perl模块包含与程序相关的路径?
现在我想调用此脚本,但使用未安装的包,但使用路径名称相同的包。
我以前perl -I /home/.../lib script.pl
,但它不工作
我该怎么办呢?
对于影响您的模块被加载的各种方法,请参阅本SO发布:
,你能否告诉我们的目录的递归上市那里你存储你想要的模块使用? ls -R
可以帮助我们找出是否有正确的路径。
当您使用-I
开关时,您必须确保您在那里找到正确的路径。如果你使用一个模块:
use Some::Module;
的Perl实际上看起来为:
$lib/Some/Module.pm
的$lib
是@INC
的目录之一。另一种说法是,如果特定目录不在@INC
中,Perl不会查看它。这意味着Perl不会自动在你的子目录中查找
如果你的模块不在那个位置,那么Perl不会在那个$lib
周围翻遍寻找它。你的XS模块可能不是这样存储的。它可能路径中有一个Perl的版本和结构的项目,所以你可能会发现它在:
$lib/5.10.1/darwin-2level/Some/Module.pm
你需要,如果你正在使用-I
自己添加这些路径。
但是,您可以在命令行上加载模块。这是很容易使用lib
,增加了额外的目录,为您提供:
perl -Mlib=/path/to/lib ...
-I和-Mlib的优缺点什么 – justintime 2010-09-09 01:08:17
好处和风险取决于你在做什么。还有一个是向@INC添加arch和版本dirs,无论好坏取决于你想要的。 – 2010-09-09 05:11:53
看哥们,不工作是一个强烈的声明。它整天坐在沙发上吗?它在你脸上吗?它需要更多的钱吗?它和你的女朋友在睡觉吗?请具体! :-) – rafl 2010-09-08 14:11:54
所以问题是你正在尝试加载你自己的软件包,但是正在加载一个默认软件包呢? – flies 2010-09-08 17:51:21