Perl - 使用-I指定的路径不会显示在@INC上

时间:2014-04-04 20:22:34

标签: perl

我在没有互联网连接的机器上设置本地perl安装(目前,我只是在VM上执行PoC)。我已经在RPM repo中安装了我的本地perl,CPANMakeMaker,现在我正在尝试使用此命令构建local::lib

perl -I /home/serveradmin/local/usr/share/perl5 Makefile.PL --bootstrap=~/local/usr --no-manpages

-I路径是CPANMakeMaker的位置。

> find /home/serveradmin/local -name CPAN.pm
/home/serveradmin/local/usr/share/perl5/CPAN.pm

> find /home/serveradmin/local -name MakeMaker.pm
/home/serveradmin/local/usr/share/perl5/ExtUtils/MakeMaker.pm

然而,它失败并出现以下错误:

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains:
/home/serveradmin/local/usr/lib/perl5/5.10.0 /home/serveradmin/local/usr/lib/perl5 
/usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl 
/usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at inc/ConfigCPAN.pm line 15.

Can't locate CPAN.pm in @INC (@INC contains: 
/home/serveradmin/local/usr/lib/perl5/5.10.0 /home/serveradmin/local/usr/lib/perl5 
/usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl 
/usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .).

perl -Venv -i perl -V都生成相同的@INCPERLLIBPERL5LIB都未设置;实际上,env | grep -i perl未显示结果:

/usr/local/lib/perl5
/usr/local/share/perl5
/usr/lib/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib/perl5
/usr/share/perl5
.

我在-I上指定的路径未显示在错误上显示的@INC上,这使得-I似乎无效。但如果我跑

perl -I /home/serveradmin/local/usr/share/perl5 -V

这正确地预先设定了@INC的路径。

我的google-fu对此没有任何启发,所以任何帮助/指针都会受到赞赏。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

Makefile.PL可能正在启动perl的另一个实例,但没有重新指定-I选项(因为它不知道它需要)。使用env var PERL5LIB可以解决这个问题,因为它从父进程传递到子进程。

那就是说,我建议您修复破坏的Perl安装。 perlbrew使安装Perl变得简单,但没有它也很简单。如果您选择不使用perlbrew,请阅读INSTALL以获取您必须输入的命令,并了解如何指定应安装到的位置。如果您需要线程支持,请不要忘记将-Dusethreads传递给Configure