6

私は Perl スクリプトを作成しました。すべての人に配布したいので、ユーザーの環境をテストし、その環境が Perl スクリプトを実行できるかどうかを調べるために使用される bash スクリプトを作成する予定でした。

次のようなことをテストしたい:

  1. Perl がそのシステムにインストールされているかどうか
  2. Perl にはバージョン 5 以上が必要です
  3. モジュール JSON::Any が利用可能かどうか

どんな提案でも大歓迎です:-)

4

3 に答える 3

14

いいえ、シェルスクリプトを記述しないでください。Perlには、これを行うための完全に優れた方法がすでにあります。これを行う正しい方法は、通常のツールチェーンを使用してCPAN対応のディストリビューションを構築することです。この一部は、perlnewmodperlmodstyle、およびperlmodinstallで説明されています。

最小限の作業例として、次のようにディレクトリレイアウトを作成します。

.
├── Build.PL
├── README
└── script
    └── abuscript.pl

Build.PLファイルに次のように入力します。

use 5.000;
use Module::Build qw();
Module::Build->new(
    module_name        => 'abuscript',
    dist_version       => '1.000',
    dist_author        => 'abubacker <abubacker@example.com>',
    dist_abstract      => 'describe what the script does in one sentence',
    configure_requires => {
        'perl' => '5.000',
    },
    requires           => {
        'JSON::Any' => 0,
    },
)->create_build_script;

目的に合わせて詳細を変更してください。

ファイルに、READMEたとえば次のようなインストール手順を記述します。

To install this module, run the following commands:

perl Build.PL
./Build install

これらすべてが完了したら、次を実行します。

perl Build.PL
./Build manifest
./Build dist

これにより、.tar.gz配布するアーカイブが作成されます。他のCPANモジュールと同じようにインストールするようにユーザーに指示するか、それが何を意味するのかわからない場合は、READMEを読む必要があります。

時間がある場合は、スクリプトをモジュールに変換することをお勧めします。プログラムpl2pm(Perlに付属)とCPANモジュールModule-Starter-PBPが役に立ちます。

ライセンスが許可されている場合は、コードをCPANにアップロードして、ユーザーにとってさらに便利にすることができます。最初に次の場所のいずれかで助けを求めてください:メーリングリストmodule-authors@perl.org、WebフォーラムPerlMonks、MagNETのIRCチャネル#toolchain(irc://irc.perl.org/toolchain)

于 2010-04-09T10:35:15.343 に答える
8

Perlの可用性を確認する最も簡単な方法は、コマンドのリターンコード(終了コード)を確認することです。そうでないperl -v場合は0、Perlを使用していません。

ここで、Perl要件に関しては、Perlスクリプト内からそれらに対処する必要があります。

#!/usr/bin/env perl
use 5.006_001;
use ModuleName 2.0;

上記のPerlコードは、perl5.6.1以降およびmodele"ModuleName"バージョン2.0以降でのみ実行されます。bashからPerlのバージョンを手動でチェックする必要はありません。Perlスクリプトから直接チェックする方が簡単です。

参照:

于 2010-04-09T06:58:39.863 に答える
2
if perl -MJSON::Any -e 'print "$JSON::Any::VERSION\n"' >/dev/null 2>&1
then : OK
else echo "Cannot find a perl with JSON::Any installed" 1>&2
     exit 1
fi

私はよく' ${PERL:-perl}'や同様の構文を使用してコマンドを識別します(awkvsnawkまたはgawk; troffvs groff;など)。

JSON :: Anyのバージョンをテストする場合は、代わりにコマンドからの出力をキャプチャします。Perlのバージョンをテストしたい場合は、' use 5.008009;'または適切と思われる数値を追加してください。(NFSマウントされたファイルシステムの1つからPerl 4を最終的に削除したのはそれほど昔のことではありませんが、少なくとも過去10年以上は、このマシン上のPerlはそれだけではありませんでした!)

于 2010-04-09T07:00:54.653 に答える