2013-04-30 118 views
0

我通過php執行了exec的perl腳本,但是我收到一個錯誤,說明模塊Net :: DNS丟失了。我已經將該模塊安裝爲普通用戶,因此位於/ home/user/perl5/i686-linux-thread-multi中,我在exec中使用完整路徑(/ usr/bin/perl)。php執行腳本時找不到Perl模塊

我甚至試過到/ home /用戶/的perl5/i686的Linux的線程多目錄添加到@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

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

這是指Exec的Perl的,我相信這是在PHP – snoofkin 2013-05-01 16:20:11

0

的替代辦法是要將您的個人圖書館納入您的腳本,因此它是獨立的從環境設置凹痕:

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

use Net::DNS; 
+0

類似的ENV我懷疑這會工作,使用LIB修改@INC在當前進程不是其他衍生(如exec)從當前的一個。 – snoofkin 2013-05-01 16:19:12

+0

爲什麼在Perl程序中使用'exec'時不起作用?從來沒有問題... – pavel 2013-05-01 18:23:13

+0

我編輯我的評論,看看它。 – snoofkin 2013-05-01 20:02:28