我在没有互联网连接的机器上设置本地perl安装(目前,我只是在VM上执行PoC)。我已经在RPM repo中安装了我的本地perl,CPAN
和MakeMaker
,现在我正在尝试使用此命令构建local::lib
:
perl -I /home/serveradmin/local/usr/share/perl5 Makefile.PL --bootstrap=~/local/usr --no-manpages
-I
路径是CPAN
和MakeMaker
的位置。
> 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 -V
和env -i perl -V
都生成相同的@INC
(PERLLIB
和PERL5LIB
都未设置;实际上,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对此没有任何启发,所以任何帮助/指针都会受到赞赏。
感谢您的时间。
答案 0 :(得分:1)
Makefile.PL
可能正在启动perl
的另一个实例,但没有重新指定-I
选项(因为它不知道它需要)。使用env var PERL5LIB
可以解决这个问题,因为它从父进程传递到子进程。
那就是说,我建议您修复破坏的Perl安装。 perlbrew
使安装Perl变得简单,但没有它也很简单。如果您选择不使用perlbrew
,请阅读INSTALL
以获取您必须输入的命令,并了解如何指定应安装到的位置。如果您需要线程支持,请不要忘记将-Dusethreads
传递给Configure
。