无法在@INC中找到SOAP / Lite.pm

时间:2015-06-04 12:33:47

标签: perl ubuntu-14.04 perlbrew

我正在尝试按照this指令构建LDV项目,我对perl一无所知。

运行测试时出现以下错误

ldv-task: NORMAL: Calling LDV-core.
Can't locate SOAP/Lite.pm in @INC (@INC contains: /home/acsia/perl5/perlbrew/perls/perl-5.10.0/lib/5.10.0/x86_64-linux /home/acsia/perl5/perlbrew/perls/perl-5.10.0/lib/5.10.0 /home/acsia/perl5/perlbrew/perls/perl-5.10.0/lib/site_perl/5.10.0/x86_64-linux /home/acsia/perl5/perlbrew/perls/perl-5.10.0/lib/site_perl/5.10.0 .) at /home/acsia/Desktop/LDV/consol-tools/ldv-core/ldv-core line 7.
BEGIN failed--compilation aborted at /home/acsia/Desktop/LDV/consol-tools/ldv-core/ldv-core line 7.

的输出
perlbrew use

是:已编辑:

Currently using perl-5.22.0

的输出
locate SOAP/Lite.pm

/usr/local/lib/perl5/site_perl/5.22.0/SOAP/Lite.pm

的输出
which perl

/usr/local/bin/perl

并且LDV核心文件默认以这样的方式启动

#!/usr/bin/perl -w
#
my $instrumnet = 'ldv-core';

use FindBin;
# To prevent meaningless module warnings use this instead of use.
BEGIN { $SIG{'__WARN__'} = sub{}; require SOAP::Lite; SOAP::Lite->import(); $SIG{__WARN__}='DEFAULT'; }
use POSIX ":sys_wait_h";
use XML::Twig;
use IO::Socket::INET;
#use File::MimeInfo;
use File::Basename;
use Cwd qw(abs_path);

etc,... etc....

感谢您的时间......

2 个答案:

答案 0 :(得分:3)

如果LDV-Core不属于您,则应使用系统的软件包管理器安装SOAP :: Lite。如果是你的,请继续阅读。

perlbrew与您的PATH一起播放,以便执行perl将执行所需的perl

但您的脚本明确使用/usr/bin/perl,因此当前使用perlperlbrew switch选择的perlbrew use无关紧要。

  1. 停止覆盖默认安装位置,并停止查看您不应该在哪里。

    unset PERL_MM_OPT
    unset PERL_MB_OPT
    unset PERL5LIB
    unset PERLLIB
    
    echo -ne 'o conf makepl_arg ""\no conf commit\n'   | cpan
    echo -ne 'o conf mbuildpl_arg ""\no conf commit\n' | cpan
    

    前四行只有临时效果。您应该停止在登录脚本中设置这些变量,以使更改成为永久变更。

  2. 在所需的Perl中安装SOAP :: Lite。

    perlbrew use perl-5.22.0    # Or perl-5.10.0 or whatever
    cpan SOAP::Lite
    
  3. 修复脚本的shebang。

    perl -i~ -pe'
       next if $. != 1;
       s/^#!.*//s;
       $_ = "#!$^X\n$_";
    ' LDV-core
    
  4. PS - 您不需要use FindBin;

答案 1 :(得分:2)

perlbrew perl是一种在同一台机器上安装许多perl版本的方法。它就像python中的virtenv。 Perlbrew允许您在各种版本的perl之间切换,并针对这些版本运行perl程序。

system perl表示perl的默认版本,主要是linux发行版。 perlbrew更改了该程序需要运行的版本,并且您的程序将开始针对不同版本运行。

如果你正在制作一些不需要很多perl版本的东西,最好使用一个版本的perl并对它们运行程序。

此外,如果您正在使用Linux发行版并且不想进入cpan以及如何安装perl模块,那么最好是针对该模块搜索相应的库并安装它们。例如,在你的情况下,我这样搜索

aptitude search soap | grep perl

这在我的ubuntu机器上给了我两个库,其中一个是针对这个模块的。安装它们很简单,您可以专注于您的工作,而不是如何安装cpan模块。