perl是否在模块的当前目录(。)中查找?

时间:2011-01-16 03:46:03

标签: perl module

perl是否会查看。 (当前目录)模块?我无法直接安装模块,我想我可以将其复制到本地目录中。这是真的吗?

6 个答案:

答案 0 :(得分:14)

perl -V将打印出有关Perl安装的各种属性,包括默认的@INC。您应该注意到.:是的,默认情况下会搜索当前工作目录的模块。

(如果没有,您可以在命令行中使用环境变量PERL5LIBPERLLIB-I,或者向sitecustomize.pl添加perl -V:sitelib。 )

答案 1 :(得分:6)

回应Cameron和tchrist在其中一个答案的评论中的讨论。

您可以使用此代码段在与脚本相同的目录中使用模块,即使脚本在另一个目录中执行也是如此。

use Cwd 'abs_path';
use File::Basename;
use lib dirname( abs_path $0 );

应该适用于所有情况和所有操作系统。 (来源:http://use.perl.org/~Aristotle/journal/33995

答案 2 :(得分:5)

最近有一些理由不依赖于.比平时多@INC,即在Perl 5.26中计划删除此默认行为。请参阅此处的开发发行说明:https://metacpan.org/pod/release/EXODIST/perl-5.25.7/pod/perldelta.pod#and-INC

众所周知,这样做是为了解决由于此行为而在某些应用程序中发现的漏洞。 CVE尚未公开发布(尚未发布)。

答案 3 :(得分:0)

我认为最有可能默认情况下,如this post所示。如果您的实现没有这样做,那么该帖子的初始问题中引用的语法将允许您引用所需的模块。

答案 4 :(得分:0)

解压缩模块的tarball目录时,使用可选的库参数构建其Makefile,其中包含您希望放置模块内容的个人目录的名称:

$ perl Makefile.PL LIB=~/perllibs

然后确保您的~/perllibs envariable中包含$PERL5LIB目录。

答案 5 :(得分:0)

Perl在搜索模块时搜索@INC数组中的目录。

请参考以下关于如何构造该数组的问题(这将告诉您如何添加当前或主目录):

  

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

请参阅以下有关Perl如何找到模块实际文件的问题:

  

How does a Perl program know where to find the file containing Perl module it uses?