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

z9ju0rcb  于 2022-11-15  发布在  Perl
关注(0)|答案(3)|浏览(125)

我有一个Perl脚本,它使用已安装的包。一个是Perl包,另一个是Perl XS包。
现在我想调用这个脚本,但使用的不是已安装的包,而是按路径命名的包。
我使用了perl -I /home/.../lib script.pl,但它不起作用
我该怎么做?

6tr1vspr

6tr1vspr2#

您可以使用lib pragma将目录附加到perl用来查找模块的路径。
因此,如果在默认目录中安装了一个名为Foo的模块,而在/home/cowens/perl5中安装了一个不同的版本,则可以说

use lib "/home/cowens/perl5";
use Foo;

并且perl将在/home/cowens/perl5中找到该版本。

9gm1akwq

9gm1akwq3#

你能给我们一个递归的目录列表吗?你要使用的模块存储在哪个目录?一个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 ...

相关问题