运行 perl 的权限被拒绝

运行 perl 的权限被拒绝

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 模块。

  1. sudo apt-get install cpanminus

  2. cpanm --local-lib=~/perl5 local::lib eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

  3. 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重复上述步骤再次安装。

相关内容