2014-02-07 43 views
1

我試圖運行使用Parallel::ForkManager Perl腳本:錯誤使用並行:: ForkManager

#!/usr/bin/perl 

use Parallel::ForkManager; 
use LWP::Simple; 

my $pm= Parallel::ForkManager->new(10); 

for my $link (@ARGV) { 
    $pm->start and next; 
    my ($fn)= $link =~ /^.*\/(.*?)$/; 

    if (!$fn) { 
     warn "Cannot determine filename from $fn\n"; 
    } 
    else { 
     $0.=" ".$fn; 
     print "Getting $fn from $link\n"; 
     my $rc=getstore($link,$fn); 
     print "$link downloaded. response code: $rc\n"; 
    }; 

    $pm->finish; 
}; 

,但我得到了以下錯誤:

File::Path version 2.06 required--this is only version 1.08 at /usr/lib/perl5/5.8.8/File/Temp.pm line 14. 
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.8/File/Temp.pm line 14. 
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/Parallel/ForkManager.pm line 441. 
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/Parallel/ForkManager.pm line 441. 
Compilation failed in require at parallel.pl line 3. 
BEGIN failed--compilation aborted at parallel.pl line 3. 

我該如何解決這些問題?

+3

更新您的Perl版本? – toolic

+0

與您的問題無關:總是使用警告;嚴格使用;'。 'for'和'if/else'塊的括號後面不需要';':for(@foo){#do something}' – ThisSuitIsBlackNot

+1

你是如何安裝Parallel :: ForkManager的?看來你做錯了。 – ysth

回答

0

Perl 5.8.8是從2006.升級到支持的版本

+0

Minor nitpick:'Parallel :: ForkManager'支持Perl 5.8(它[所有的測試都通過了Perl 5.8.8](http://www.cpantesters.org/distro/P/Parallel-ForkManager.html?grade=1&perlmat = 2&pat​​ches = 2&oncpan = 1&distmat = 1&perlver = 5.8.8&osname = ALL&version = 1.06)。 OP的'File :: Path'版本是這裏的問題(當然,你說得對,沒有人應該運行Perl 5.8)。 – ThisSuitIsBlackNot

1

升級您的File :: Path版本。

正如錯誤所述,您運行的是版本1.08,但您運行的ForkManager版本依賴於版本2.06。

還要注意,它看起來實際上是File :: Temp,它具有File :: Path依賴關係,而P :: FM對File :: Temp有依賴關係。

無論採用哪種方式,都需要更新版本的File :: Path。