当php执行脚本时找不到Perl模块

时间:2013-04-30 21:00:00

标签: php perl module exec

我通过php执行带exec的perl脚本,但是我收到模块Net :: DNS丢失的错误。我已经将模块作为普通用户安装,因此位于/ home / user / perl5 / i686-linux-thread-multi中,并且我在exec中使用完整路径(/ usr / bin / perl)。

我甚至尝试将/ home / user / perl5 / i686-linux-thread-multi目录添加到@INC,但脚本仍然会抛出错误...

我还尝试将带有自定义安装路径的模块直接安装到/ usr / lib / perl5 / vendor_perl中,但这也没有解决问题。 而且符号链接也没有解决这个问题。

以下是错误消息

  Can't locate Net/DNS.pm in @INC (@INC contains: 
/usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl 
/usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl

任何想法如何解决这个问题,如何处理这个想法已经没有了。

2 个答案:

答案 0 :(得分:2)

exec之前,添加:

$ENV{PERL5LIB} = "$ENV{PERL5LIB}:/home/user/perl5/i686-linux-thread-multi";

为什么使用use lib无效(对于pavel的评论):

#!/usr/bin/env perl
use strict;
use warnings;
use lib "hate_you";
use Data::Dumper;

print Dumper(\@INC);

print "In sub process....\n";
exec(qq{perl -MData::Dumper -e "print Dumper(\@INC);"});

将在我的机器上打印:

$VAR1 = [
          'hate_you',
          '/etc/perl',
          '/usr/local/lib/perl/5.14.2',
          '/usr/local/share/perl/5.14.2',
          '/usr/lib/perl5',
          '/usr/share/perl5',
          '/usr/lib/perl/5.14',
          '/usr/share/perl/5.14',
          '/usr/local/lib/site_perl',
          '.'
        ];
In sub process....

    $VAR1 = '/etc/perl';
    $VAR2 = '/usr/local/lib/perl/5.14.2';
    $VAR3 = '/usr/local/share/perl/5.14.2';
    $VAR4 = '/usr/lib/perl5';
    $VAR5 = '/usr/share/perl5';
    $VAR6 = '/usr/lib/perl/5.14';
    $VAR7 = '/usr/share/perl/5.14';
    $VAR8 = '/usr/local/lib/site_perl';
    $VAR9 = '.';

答案 1 :(得分:0)

另一种方法是在您的脚本中包含您的个人库,因此它独立于环境集:

use lib qw(/home/user/perl5/i686-linux-thread-multi);

use Net::DNS;