0

我通过 php 执行了一个 perl 脚本exec,但是我收到一个错误,即模块 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

知道如何解决这个问题,有点想不出如何处理这个问题。

4

2 回答 2

2

之前exec,添加:

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

为什么使用use lib不会起作用(对于帕维尔的评论):

#!/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 = '.';
于 2013-04-30T21:16:34.117 回答
0

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

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

use Net::DNS;
于 2013-04-30T21:58:59.793 回答