私は問題を抱えています、私use local::lib;
はスクリプトに入れたいです。しかし、このスクリプトを多くの場所で使用する必要があるため、このスクリプトをサーバーにインストールするたびに にを追加しようとはしませんeval
。そして、サーバーにlocal::libをグローバルに (デフォルトで) インストールbashrc
できません。スクリプト内から、サーバーのデフォルトのディレクトリにインストールせずに、推奨されるモジュールがどこにあるかを知る方法はありますか?@INC
use local::lib
local::lib
eval
local::lib
@INC
2 に答える
少なくとも 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
スクリプトの上部にあるこのようなものは機能するはずですが、通常の@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があります。作成できるさまざまなローカルリポジトリは、適切な場所に関連付けられていません。