Perl スクリプトで使用されているすべてのモジュールを見つけてインストールするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1304756

  •  19-09-2019
  •  | 
  •  

質問

デプロイする Perl スクリプトがいくつか与えられました。

これらのスクリプトで使用されるすべてのモジュールを見つけてインストールする最も簡単な方法は何ですか?

編集:

私が見つけた限りでは、条件付きの include や eval に include はありません。

役に立ちましたか?

解決

私の モジュール::抽出::使用 ヘルプ?あるよ 抽出モジュール プログラム の中に ディレクトリ:

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

そのリストをパイプすることができます cpan.

$ examples/extract_modules -l some_program | xargs cpan

依存関係の最初のレベルにすぎないリストを取得したら、 スクリプト配布 これにより、通常の CPAN ツールチェーンを使用してすべてをインストールできるようになります。

何かうまくいかない場合は、それを処理できるようにプログラムを変更します。他の人にとって役立つと思われる場合は、プル リクエストを送信してください。:)

他のヒント

期待してた モジュール::ScanDeps コマンドラインユーティリティを提供します スキャンデプス.pl ここでは役に立ちますが、残念なことに、 Module::ScanDeps 明らかにこの特定の目的を意図したものではありません scandeps.pl 不足しているモジュールを無視するか、( -c または -x) スクリプトがインストールされていないモジュールを使用するとエラーが発生します。

これは、次を使用してスクリプトを実行しようとする簡単で汚い Perl スクリプトです。 する 成功するまで:

#!/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 = $@;
    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」が出力されます。これにより、よりクリーンなループも得られます。これについては後で見ていきます。

この手法を使用すると、実行時にロードされる依存関係を見逃す可能性があります。

まあこれは 非常に単純な方法 これで解決しました。

bash シェルの場合:

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

これにより、モジュール名のみが各行に 1 つずつ記載されたファイルが得られました。

それからこれを使いました

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

ファイル内の各モジュール名に対して cpan を呼び出します。そして、必要に応じて依存関係をインストールするための CPAN の質問に「はい」と答えてそこに座っていました。

あまりきれいではありませんが、今回はうまくいきました。

あるいはさせてください PARのpp 必要なものすべてを 1 つの実行可能ファイルにまとめます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top