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


Perl module not found when script executed by php

我通过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,但这也没有解决问题。而symlink也没有解决这个问题。

下面是错误信息

  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

有办法解决这个问题吗?我实在想不出办法了

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 = '.';

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

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