2009-08-20 92 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

相关问题