我通过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
任何想法如何解决这个问题,如何处理这个想法已经没有了。
答案 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;