[英]Perl module not found when script executed by php
我通过php执行perc脚本与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中,但这也没有解决问题。 而且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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.