【问题标题】:Perl issue with local::lib本地::lib 的 Perl 问题
【发布时间】:2013-07-29 20:57:08
【问题描述】:

我正在尝试使用local::lib,因为我没有系统权限,并且我已经下载了本地库并使用了引导技术。

perl Makefile.PL --bootstrap
make test && make install
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc

之后我尝试下载模块,它存储在/home/perl5/man/man3

但是当我运行脚本时,我得到了一个错误,它似乎采用了旧路径。当我在我的系统上运行相同的命令时,它确实需要本地库并且脚本运行正常。

Can't locate Net/Patricia.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at nettest.pl line 2.
BEGIN failed--compilation aborted at nettest.pl line 2.
-bash-3.2$ 

【问题讨论】:

  • 如何运行脚本?这是另一个用户吗?显示本地库配置:echo PATH=$PATH ; env|sort|grep PERL
  • PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin 使用 Net::Patricia;我的 $pt = new Net::Patricia; $pt->add_string('192.168.0.0/25'); $pt->add_string('192.168.0.0/16');打印 $pt->match_string('192.168.0.0/24'), "\n"; perl hi.pl 我在我的实验室中使用相同的登录名,但在服务器上我在 ssh 时遇到问题,但在本地实验室系统上我的脚本工作。
  • 这表明当你运行脚本时,它缺少~/.bashrc中所做的配置。找出不执行~/.bashrc 的原因。
  • 如果我只运行这个 ~/.bashrc bash: /homes/de214/.bashrc: Permission denied 是不是因为对特定机器的限制。还有其他方法可以使本地库工作
  • 请剪切您的 ~/.bashrc 文件并更新您的问题

标签: perl perl-module


【解决方案1】:

您是否在脚本的开头使用了它?

use local::lib;

或者,如果安装在其他位置,例如:

use local::lib '~/foo';

【讨论】:

  • 是现在与本地库一起使用使用 local::lib;使用 Net::Patricia;我的 $pt = new Net::Patricia; $pt->add_string('192.168.0.0/25'); $pt->add_string('192.168.0.0/16');打印 $pt->match_string('192.168.0.0/24'), "\n";无法在 @INC 中找到 local/lib.pm(@INC 包含:/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 / usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/ lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at sai.pl
【解决方案2】:

在您的脚本中,您也可以只引用所需模块的位置,而无需使用 local::lib。这将简化调试的情况,但也可能是一个永久的解决方案。只需将其添加到脚本的顶部:

# Path to directory that contains the 'Net' folder.
use lib '/path/to/my/modules';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2014-06-17
    • 2014-12-29
    • 2014-12-07
    • 2011-10-01
    相关资源
    最近更新 更多