如何将Perl模块包含在与程序相关的路径中?
我有一个使用已安装包的Perl脚本。一个是Perl包,另一个是PerlXS包 现在我想调用这个脚本,但不是使用已安装的包,而是使用路径中具有相同名称的包 我使用了如何将Perl模块包含在与程序相关的路径中?,perl,path,packages,Perl,Path,Packages,我有一个使用已安装包的Perl脚本。一个是Perl包,另一个是PerlXS包 现在我想调用这个脚本,但不是使用已安装的包,而是使用路径中具有相同名称的包 我使用了perl-I/home/../lib script.pl,但它不起作用 我该怎么做?您可以使用pragma将目录前置到perl用于查找模块的路径 因此,如果在默认目录中安装了名为Foo的模块,并且在/home/cowens/perl5中安装了不同的版本,您可以说 use lib "/home/cowens/perl5"; use Foo
perl-I/home/../lib script.pl
,但它不起作用
我该怎么做?您可以使用pragma将目录前置到perl
用于查找模块的路径
因此,如果在默认目录中安装了名为Foo
的模块,并且在/home/cowens/perl5
中安装了不同的版本,您可以说
use lib "/home/cowens/perl5";
use Foo;
而
perl
将在/home/cowens/perl5
中找到该版本。有关影响模块加载位置的各种方式,请查看以下帖子:
您能给我们一个递归的目录列表,其中存储了您想要使用的模块吗?一个
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 ...
不幸的是,这不是我的脚本,所以我不能修改它。我可以用选项来运行它。看,伙计,不工作是一个强有力的声明。它整天坐在沙发上吗?它在向你做鬼脸吗?它需要更多的钱吗?是和你女朋友睡觉吗?请具体点!:-)所以问题是,您试图加载自己的包,但却加载了默认包?我已经尝试了列表中的所有方法/但没有帮助/我仍然无法使用自己的模块(您需要为我们指定确切的软件包名称以提供更详细的帮助-提供
使用xxx
行。因此,请指定模块代码的确切目录结构-I和-mlibt的优点和缺点-好处和风险取决于您正在做什么。一个只添加您所说的内容,另一个为@INC添加arch和version dirs。whith呃,好坏取决于你想要什么。