2009-08-20 94 views

回答

10

請問我的Module::Extract::Use有幫助嗎?有一個在例子的extract_modules program目錄:

$ examples/extract_modules -l some_program 
File::Spec 
File::Spec::Functions 
strict 
warning 

可以通過管道將列出來cpan

$ examples/extract_modules -l some_program | xargs cpan 

一旦你的列表中,這是唯一依賴的第一級,你可以做一個script distribution,使人們能夠使用普通的CPAN工具鏈安裝的一切。

如果有些東西不適合你,請修改程序來處理它。如果您認爲這對其他人有用,請發送拉取請求。 :)

+0

看起來很有希望 – Nifle 2009-08-21 17:17:19

1

那麼這是這個很簡單的方法我解決了這個問題。

在bash shell:

cat *.pl | grep "^use " | tr ';' ' ' | while read a b c; do echo $b; done | sort -iu > modules.txt 

這給了我一個文件,只有模塊名稱,每行一個。

然後我用這個

cat modules.txt | while read a; do cpan $a; done 

調用CPAN的文件中的每個模塊的名稱。然後坐在那裏回答CPAN的問題,以便酌情安裝依賴關係。

不漂亮,但這次它完成了工作。

+0

如何不使用但需要的模塊? – innaM 2009-08-20 09:27:37

+0

我會相應地調整第一行的grep – Nifle 2009-08-20 10:43:51

+0

那些使用''不是第一行的行呢?它甚至不允許可選空間。 – 2009-08-20 15:41:15

3

我希望Module::ScanDeps它提供了命令行實用程序scandeps.pl在這裏很有用,但我失望的是,Module::ScanDeps顯然不適合這個特定的目的,scandeps.pl要麼忽略缺少模塊或(與-c-x)嘎嘎叫着當腳本使用未安裝的模塊。

這裏是一個quick'n'dirty Perl腳本試圖使用do直到成功執行腳本:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Term::Prompt; 

my ($script) = @ARGV; 

die "Provide script file name on the command line\n" 
    unless defined $script; 

until (do $script) { 
    my $ex = [email protected]; 
    if (my ($file) = $ex =~ /^Can't locate (.+?) in/) { 
     my $module = $file; 
     $module =~ s/\.(\w+)$//; 
     $module = join('::', split '/', $module); 
     print "Attempting to install '$module' via cpan\n"; 
     system(cpan => $module); 
     last unless prompt(y => 'Try Again?', '', 'n'); 
    } 
    else { 
     die $ex; 
    } 
} 

如果你不希望運行腳本,則可以運行perl -c $script,捕獲stderr輸出並解析丟失的模塊消息,併爲找到的每個此類模塊調用cpan,直到perl -c $script輸出「語法OK」。這也給你一個更清潔的循環。我稍後再看。

您可能會錯過使用此技術在運行時加載的依賴項。

+1

這不是有點危險嗎? $腳本可能會造成破壞性。 – Nifle 2009-08-20 12:11:25

+1

難道你不想運行腳本嗎?在這一點上,你一定已經決定腳本值得運行,而你只需要依賴。 – 2009-08-20 12:24:33

+0

我被告知每天早上3點運行這些程序(他們做一些數據庫維護)。我不能決定是否可以在白天運行它們來安裝依賴項。 (而且我不想等到凌晨3點)。我同意大多數時候這可能不是問題。這就是爲什麼我指出它可能有點**危險。 – Nifle 2009-08-20 16:05:24

0

或者讓PAR's pp爲您在單個可執行文件中收集您需要的所有內容。

+0

我不認爲'pp'安裝缺少依賴關係。我錯過了什麼。 – 2009-08-20 11:21:58

相關問題