如何构造Perl的@INC? (aka有什么方法来影响Perl模块的搜索?)
影响Perl模块搜索的所有方法是什么?
或者,Perl的@INC是如何构建的? 我们知道,Perl uses 在StackOverflow上似乎没有一个全面的“@INC”常见问题类型的帖子,所以这个问题是一个意思。 解决方法
我们将看看该数组的内容是如何构造的,并且可以被操作以影响Perl解释器将在哪里找到模块文件。
>默认@INC Perl解释器是compiled with a specific
注意 。最后;这是当前目录。当Perl与 要在配置Perl二进制编译时更改默认路径,请设置配置选项
>环境变量PERL5LIB(或PERLLIB) Perl预先在@INC上提供了包含在shell的环境变量的PERL5LIB(如果未定义,使用PERLLIB)中的目录(冒号分隔)的列表。要在PERL5LIB和PERLLIB环境变量生效后查看@INC的内容,请运行perl -V。
> -I命令行选项 Perl预先将@INC与作为-I命令行选项的值传递的目录列表(冒号分隔)。这可以通过三种方式完成,像Perl选项一样: >在命令行传递: perl -I /my/moduledir your_script.pl >通过Perl脚本的第一行(shebang)传递: #!/usr/local/bin/perl -w -I /my/moduledir >将其作为PERL5OPT(或PERLOPT)环境变量的一部分传递(参见Programming Perl中的章节19.02) >通过 Perl预先将@INC与通过使用lib传递到它的目录列表。 在程序中: use lib ("/dir1","/dir2"); 在命令行上: perl -Mlib=/dir1,/dir2 你也可以remove the directories from 注:由于在编译阶段使用了@INC,因此必须在使用MyModule语句之前的BEGIN {}块中完成。 >通过unshift @INC,$ dir将目录添加到开头。 注意:目录不会按照此答案中列出的顺序移到@INC上。默认@INC是列表中的最后一个,前面是PERL5LIB,前面是-I,前面是使用lib和直接的@INC操作,后两个以Perl代码的顺序混合。 参考文献: > perldoc perlmod 在Stack Overflow上似乎没有一个全面的@INC FAQ类型的文章,所以这个问题是一个意思。 什么时候使用每种方法? >如果一个目录中的模块需要被您站点上的许多/所有脚本使用,特别是由多个用户运行,那么该目录应该包含在编译成Perl二进制文件的默认@INC中。 注意:请注意通常的Unix环境变量陷阱 – 例如。在某些情况下,作为特定用户运行脚本不能保证在设置的用户环境中运行它们。通过su。 一个示例是在prod / uat / dev目录中的库之间自动切换,如果dev和/或UAT中缺少瀑布库,则会在prod中检索瀑布库(最后一个条件使标准的“use lib FindBin”解决方案相当复杂。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |