perl 5.18.2 在我的 Ubuntu 14.04 系统上运行良好,直到我需要一个 CPAN 中的软件包,而该软件包在 Ubuntu 软件包中并不存在。我以 root 身份安装了它,但它不起作用,但安装过程似乎更改了某些内容的权限。现在,我无法以普通用户身份运行 Perl。
作为普通用户,“perl -v”可以正常工作。但是“perl -V”却给出以下信息:
$ perl -V
Can't locate Config.pm: Permission denied.
BEGIN failed--compilation aborted.
如果我在 sudo 下运行它,那么它就可以工作:
$ sudo perl -V
...
@INC:
/etc/perl
/usr/local/lib/perl/5.18.2
/usr/local/share/perl/5.18.2
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.18
/usr/share/perl/5.18
/usr/local/lib/site_perl
.
确实,Config.pm 位于 /usr/lib/perl/5.18 中,并且普通用户可以读取其权限。因此,某些内容已切换到 root,但我不知道发生了什么。
有没有人见过这种情况,知道我应该寻找什么?出于绝望,我甚至卸载了 perl 并重新安装。没有用。虽然有些好笑...卸载后,我仍然有一个 /usr/bin/perl 可执行文件。不确定这是否相关...
任何帮助,将不胜感激!
射线
答案1
通过谷歌搜索(参见这里) 我理解,如果 @INC 路径中的某个目录无法访问,则放弃对 Config.pm(或任何模块)的搜索。因此,请检查是否有任何目录无法被“全部”读取。
奇怪的是,@INC 路径中不存在的目录名没有问题。
答案2
您可以尝试安装local::lib
。但您可能需要重新安装一些 Perl 模块。
sudo apt-get install cpanminus
cpanm --local-lib=~/perl5 local::lib eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
echo "export PERL5LIB=\"$HOME/perl5/lib/perl5\"">>~/.bashrc && echo "export PERL_MB_OPT=\"--install_base '$HOME/perl5'\">>~/.bashrc && echo "export PERL_LOCAL_LIB_ROOT=$HOME/perl5">>~/.bashrc
现在,打开一个新的终端(或运行source ~/.bashrc
)并尝试安装一些 Perl 模块。
对我来说有效!希望对你也有效!否则,这意味着你的 CPAN 安装已损坏。在这种情况下,使用命令sudo dpkg --list | grep libcpan
列出所有 cpan 的软件包,首先尝试升级软件包。
如果仍然不起作用,请尝试删除并重新安装所有程序!之后,local::lib
重复上述步骤再次安装。