2015-09-25 70 views
4

我没有系统的root访问权限,所以我利用当地::我用引导的方法安装的lib安装Perl模块:Perl - Local :: lib在@INC中不能始终找到本地路径 - 与perlbrew冲突?

perl Makefile.PL --bootstrap=~/foo 
make test && make install 
echo '[ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"' >>~/.bash_profile 

然后我成功安装cpanm和使用cpanm安装模块FAST。然而,当我尝试使用fasgrep功能我得到以下错误:

% fasgrep 
Can't locate FAST.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /home/dpearton/perl5/bin/fasgrep line 5. 

我检查了FAST.pm在当地的lib可用,它不过是系统似乎并没有寻找它那里。

根据路径变量应该找对了地方:

$ echo PATH=$PATH ; env|sort|grep PERL 
PERL5LIB=/home/dpearton/perl5/lib/perl5:/home/dpearton/perl5/lib/perl5 
PERLBREW_BASHRC_VERSION=0.73 
PERLBREW_HOME=/home/dpearton/.perlbrew 
PERLBREW_ROOT=/home/dpearton/perl5/perlbrew 
PERL_LOCAL_LIB_ROOT=/home/dpearton/perl5 
PERL_MB_OPT=--install_base "/home/dpearton/perl5" 
PERL_MM_OPT=INSTALL_BASE=/home/dpearton/perl5 

我甚至增加出口PER5LIB = $ HOME/perl5的/ lib目录/ perl5的我的.bash_profile,它仍然没有按”工作。

我很新使用perl。这个问题可能是我也安装了perlbrew?如果是这样,我该如何做一个“干净的”卸载prelbrew?

+0

运行'which perl'来看看它是否使用你的perlbrew Perl。 – simbabque

+0

欢迎来到Stack Overflow!关于问题标题:它是否始终不findin_(总是),还是它不一致find_(有时它工作)模块?如果它不是你的意思,请编辑标题,因为它很混乱。 – simbabque

+0

它有时会找到模块。当我使用cpanm(不在系统perl中)安装时,它可以工作,但是使用FAST软件包中的脚本不会。 –

回答

5

在其中印刷环境显示PERL5LIB设置为添加

/home/dpearton/perl5/lib/perl5 

/home/dpearton/perl5/lib/perl5 

@INC,但既不的那些(相同的)的路径中的@INC发现该壳perl试图加载FAST.pm

两种可能性:

  • perl继承了一个不同的环境比你甩了一个或
  • perl开始用-T(污染模式)。

检查shebang行fasgrep查看-T是否被用来排除这种可能性。我怀疑-T被使用。它增加了一些安全检查,以防止用户输入以执行的命令结束。删除-T只会删除这些检查。由于该脚本既不可从外部访问,也不能使用setuid,因此-T的好处已经非常小。如果这是问题,请继续并将其删除。

我怀疑这是另一种可能性,特别是因为你表现出fasgrep从不同的提示(%),比从中运行set的一个($)开始。

+0

善于思考污染模式! – simbabque

+0

检查了fasgrep脚本,它以'#!/ usr/bin/perl -wT'开头。我不知道污点模式标记会做什么,将它删除会导致任何其他问题?手动编辑模块中的所有脚本将会很痛苦! –

+3

它增加了一些安全检查,以防止用户输入结束在执行的命令。删除'-T'只需删除这些检查。由于这个脚本既不能从外部访问也不能使用setuid,'-T'的好处已经很小了。继续并将其删除。 – ikegami