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

Leo*_*zen 4 perl module

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

eph*_*ent 14

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

(如果没有,你可以使用环境变量PERL5LIB或者PERLLIB,或者-I在命令行中,或添加sitecustomize.plperl -V:sitelib).

  • @Cameron:依赖**进程的**cwd()是非常狡猾的; 这意味着你必须在一个特定的目录中运行一个特定的程序,这是疯了.如果要将模块放在与主脚本本身相同的起始目录中,则需要`使用FindBin; 使用lib $ FindBin :: Bin;`代替.当你想要加载自己程序的基本组件时,你永远不想冒险依赖某人最后cd的变迁. (6认同)
  • 将东西安装到dot中,该进程的当前工作目录并不真正起作用,不应该依赖它.它什么都不像`$ FindBin :: Bin`! (4认同)

Joe*_*ger 6

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

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

use Cwd 'abs_path';
use File::Basename;
use lib dirname( abs_path $0 );
Run Code Online (Sandbox Code Playgroud)

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


Joe*_*ger 5

最近出现了一些理由不依赖.于被@INC比平常多,即此默认行为被安排在Perl 5.26被删除.请参阅此处的开发发行说明:https://metacpan.org/pod/release/EXODIST/perl-5.25.7/pod/perldelta.pod#and-INC

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