1

私は問題を抱えています、私use local::lib;はスクリプトに入れたいです。しかし、このスクリプトを多くの場所で使用する必要があるため、このスクリプトをサーバーにインストールするたびに にを追加しようとはしませんeval。そして、サーバーにlocal::libをグローバルに (デフォルトで) インストールbashrcできません。スクリプト内から、サーバーのデフォルトのディレクトリにインストールせずに、推奨されるモジュールがどこにあるかを知る方法はありますか?@INCuse local::liblocal::libevallocal::lib@INC

4

2 に答える 2

3

少なくとも local::lib がインストールされた場所を知る必要があり、これを指定することはできないため、1 つのシェル コマンドまたは環境変数の宣言が必要です。のデフォルトを使用したと仮定すると--bootstrap、これは Perl がライブラリを見つけるための bash の最小限の例です。

# persistent for this shell only
export PERL5LIB=$PERL5LIB:$(perl -MConfig -e'print "$ENV{HOME}/perl5/lib/perl5/$Config{archname}:$ENV{HOME}/perl5/lib/perl5"')
perl yourprog
perl yourprog
perl yourprog

あるいは単に

# environment for one run of perl only
PERL5LIB=$PERL5LIB:$(perl -MConfig -e'print "$ENV{HOME}/perl5/lib/perl5/$Config{archname}:$ENV{HOME}/perl5/lib/perl5"') perl yourprog

ディレクトリ名を単純にハードコーディングして、eval と perl の呼び出しを回避しても安全です。

use local::lib;拡張からモジュールを見つけてロードします@INC%INC実際に必要な場合は、特定の場所を調べてください。

警告: 現在、local::lib を使用して追加のモジュールをインストールすることはできません。これには、出力される通常の eval で行われた残りの宣言が必要です。


以下の緊急のように、再実行のトリックを使用して内部から環境変数を設定します。

use autodie qw(:all);
unless ($ENV{REEXEC}) {
    $ENV{REEXEC} = 1;
    $ENV{PERL5LIB} = …
    exec $^X, $0;
}
# main starts here
于 2011-01-12T07:48:52.297 に答える
1

スクリプトの上部にあるこのようなものは機能するはずですが、通常の@INCのすべてのボックスにlocal :: libがインストールされているため、テストされていません– </ p>

use lib "/path/to/local/lib's/lib";
use local::lib "/path/to/specific/local-lib/base/you/want";

同じ方法でlocal::libをインストールすることをお勧めします。デフォルトの@INCには、メインのenvperlがあります。作成できるさまざまなローカルリポジトリは、適切な場所に関連付けられていません。

于 2011-01-14T22:04:38.880 に答える