设置PERL5LIB

时间:2011-03-02 12:31:46

标签: perl

我可以在单独的脚本中设置PERL5LIB并在其他脚本中调用该脚本吗?我该怎么做?它将如何影响使用它的脚本?

感谢。

5 个答案:

答案 0 :(得分:7)

在运行时设置PERL5LIB不会影响Perl的搜索路径。您需要在执行解释器之前导出变量 或者,您可以在编译时修改@INC(也可以在单独的脚本/模块中执行):

BEGIN { unshift @INC, "/path/to/dir" }

这是lib编译指示的作用。

答案 1 :(得分:3)

你可以通过'使用lib'而不是操纵环境来做到这一点:

use lib '/home/perl5';

这可能是您需要的单独文件。

答案 2 :(得分:1)

PERL5INC shell 环境变量,因此您不会在Perl程序中设置它(通常),而是在调用Perl之前指定它。下面是一个shell命令,我使用PERL5LIB指示prove找到驻留在~/OnePop中的Perl模块:

$ PERL5LIB=~/OnePop prove -l t
... PERL5LIB is unset here ....

当命令前面有这样的变量赋值时,shell会设置并将变量(PERL5LIB)导出到该命令,但之后变量将再次取消设置。您还可以在shell中设置变量,以便所有后续命令都可以继承它。

$ export PERL5LIB=~/OnePop
...
$ prove -l t
... PERL5LIB continues to be set here ...

如果您忘记了上面示例中的export关键字(即在单独的行中使用PERL5LIB=~/OnePop分配值),则变量将在shell中设置但它将继承您运行的任何命令(意味着prove将无法看到它。)

最后,如果你想在Perl程序中设置环境PERL5LIB变量,你必须这样写:

$ENV{PERL5LIB} = glob("~/OnePop");   # glob() expands the tilde
system(qw( prove -l t ));

尽管正如其他人所指出的那样,如果你想在Perl中指定包含路径,那么使用use lib $PATH会更容易/更好。

答案 3 :(得分:0)

PERL5INC是一个环境变量。环境变量只从父母继承到子女,不能(轻易)设置相反的方式。如果你想在外部文件中存储额外的搜索路径,我建议你把它作为一个简单的路径列表,写一个简单的循环来读取文件中的每个路径,并在当前进程中操作@INC。如果您希望在编译时尽早完成此操作,则必须使用BEGIN {}块。

例如

BEGIN{
  open(INCFILE,"<","my.inc.file") or die($!);
  foreach(<INCFILE>){
    push @INC,$_;
  }
  close(INCFILE);
}

答案 4 :(得分:0)

PERL5LIB的替代方案:

您可以安装最新版本的Perl 5(当然,在非系统位置)。使用模块文件或完成所需的任何操作后,可以使shell显示新的perlcpan可执行文件,您可以使用cpan安装所需的所有模块。我有时会使用Python虚拟环境以类似的方式为单个应用程序执行此操作。