11

私はバージョン5.6.1用に書かれたperlスクリプトを持っており、これはOracleパッケージ、DBIパッケージなどに依存しています。すべてが正しくインストールされ、機能します。

最近、perlバージョン5.8.4がインストールされましたが、これらの依存関係が正しく設定されていないため、スクリプトが失敗します。

'perl'コマンドは/program/perl_v5.8.4/bin/perlを指します-最新バージョン

したがって、perlスクリプトを実行する必要がある場合は、コマンドプロンプトで手動で指定する必要があります

 /program/perl_v5.6.1/bin/perl scriptName.pl

スクリプトに次の行を追加してみました。

 /program/perl_v5.6.1/bin/perl 
 use v5.6.1;

ただし、これは、スクリプトがPerlバージョン>5.6.1を使用する必要があることを意味します

私は示唆するいくつかの関連する質問を見つけました:

  1. パスをエクスポートします。ただし、パスをエクスポートしなくても、すべてのユーザーにスクリプトが必要です。
  2. より大きいバージョンを指定してください。ただし、このスクリプトには特定のバージョンを1つだけ使用したいと思います。
  3. コマンドを使用/要求します。上記と同じ問題。

私の質問:特定のバージョンのperlのみを使用するようにスクリプトで指定するにはどうすればよいですか?

4

2 に答える 2

9

#!/some/path/to/perl問題は、次のように perl スクリプトを呼び出すと、シバン行 ( ) で指定されたインタープリターが使用されないことです。

perl some_script.pl

... 「デフォルト」として (単純化するために) perl が選択されます。ファイル自体を実行して、代わりにシバンの生の力を使用する必要があります。

./some_script.pl

もちろん、これは、このファイルを実行可能にする必要があることを意味します (chmod a+xたとえば、 を使用)。

于 2012-07-08T23:12:25.403 に答える
4

私は自分のコードに持っています:

our $LEVEL = '5.10.1';
our $BRACKETLEVEL = sprintf "%d.%03d%03d", split/\./, $LEVEL;

if ($] != $currentperl::BRACKETLEVEL)
{
    die sprintf "Must use perl %s, this is %vd!\n", $LEVEL, $^V;
}

これらは実際には 2 つの異なるモジュールですが、それが基本的な考え方です。use 5.10.1;開発者がその製品に間違ったレベルの perl を使用しようとすると、代わりにスクリプトの先頭に「正しいレベルを使用」するだけで、このダイが発生します。ただし、他に行うことは何もしuse 5.10.1;ません (strict を有効にする、say、switch などの機能を有効にするなど)。

于 2012-07-08T22:21:50.533 に答える