我有一个Perl脚本,它使用已安装的包。一个是Perl包,另一个是Perl XS包。现在我想调用这个脚本,但使用的不是已安装的包,而是按路径命名的包。我使用了perl -I /home/.../lib script.pl,但它不起作用我该怎么做?
perl -I /home/.../lib script.pl
8mmmxcuj1#
有关影响模块加载位置的各种方式,请查看此SO公告:How is Perl's @INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)
6tr1vspr2#
您可以使用lib pragma将目录附加到perl用来查找模块的路径。因此,如果在默认目录中安装了一个名为Foo的模块,而在/home/cowens/perl5中安装了一个不同的版本,则可以说
lib
perl
Foo
/home/cowens/perl5
use lib "/home/cowens/perl5"; use Foo;
并且perl将在/home/cowens/perl5中找到该版本。
9gm1akwq3#
你能给我们一个递归的目录列表吗?你要使用的模块存储在哪个目录?一个ls -R可以帮助我们判断你是否有正确的路径。当你使用-I开关时,你必须确保你在那里得到正确的路径。
ls -R
-I
use Some::Module;
Perl实际上查找:
$lib/Some/Module.pm
$lib是@INC中的一个目录。换句话说,如果特定目录不在@INC中,Perl就不会在其中查找。这意味着Perl不会自动为您查找子目录如果你的模块不在那个位置,Perl就不会在$lib中到处找它。你的XS模块可能不是这样存储的。它可能在路径中有一个Perl版本和archtype,所以你可能会在以下位置找到它:
$lib
@INC
$lib/5.10.1/darwin-2level/Some/Module.pm
如果使用-I,则需要自己添加这些路径。但是,您可以在命令行上加载模块,使用lib会更容易,它会为您添加额外的目录:
perl -Mlib=/path/to/lib ...
3条答案
按热度按时间8mmmxcuj1#
有关影响模块加载位置的各种方式,请查看此SO公告:
How is Perl's @INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)
6tr1vspr2#
您可以使用
lib
pragma将目录附加到perl
用来查找模块的路径。因此,如果在默认目录中安装了一个名为
Foo
的模块,而在/home/cowens/perl5
中安装了一个不同的版本,则可以说并且
perl
将在/home/cowens/perl5
中找到该版本。9gm1akwq3#
你能给我们一个递归的目录列表吗?你要使用的模块存储在哪个目录?一个
ls -R
可以帮助我们判断你是否有正确的路径。当你使用
-I
开关时,你必须确保你在那里得到正确的路径。Perl实际上查找:
$lib
是@INC
中的一个目录。换句话说,如果特定目录不在@INC
中,Perl就不会在其中查找。这意味着Perl不会自动为您查找子目录如果你的模块不在那个位置,Perl就不会在
$lib
中到处找它。你的XS模块可能不是这样存储的。它可能在路径中有一个Perl版本和archtype,所以你可能会在以下位置找到它:如果使用
-I
,则需要自己添加这些路径。但是,您可以在命令行上加载模块,使用
lib
会更容易,它会为您添加额外的目录: