如何在Perl模块中包含相对于程序的路径?

时间:2010-09-08 14:01:24

标签: perl path packages

我有一个使用已安装软件包的Perl脚本。一个是Perl包,另一个是Perl XS包。

现在我想调用这个脚本,但是使用未安装的软件包,而是使用路径名称相同的软件包。

我使用了perl -I /home/.../lib script.pl,但它不起作用

我该怎么做?

3 个答案:

答案 0 :(得分:5)

有关影响模块加载位置的各种方法,请查看此SO帖子:

How is Perl's @INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)

答案 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 ...