この権利を Google で検索する方法がわかりません: で外部ツールを呼び出したいPerl
- ルート以外にインストールされたモジュールの場合、ディレクトリを に追加できます@INC
。ただし、これは他のバイナリ/実行可能ファイルでは機能しません。たとえば、Perlfile は/home/user/dev/perl.pl
、モジュールは/home/user/dev/modules/
、Pythonscript は です/home/user/dev/tools/python.py
。これでpush @INC,'/home/user/dev/modules/'
、すべてのモジュールを見つけることができます。pythonscript の場合、パス全体を使用する必要がありますsystem("python /home/user/dev/tools/python.py")
。tools ディレクトリをビルド PATH に追加せずに自動的に検索する可能性はありますsystem("python python.py")
か? どうも
4 に答える
ニーズに合う場合と合わない場合がある代替アプローチ:
システムを呼び出す前のどこか:
chdir '/home/user/dev/tools' or die "Couldn't chdir to tools: $!\n";
Perlスクリプト内からPATH変数へのパスを追加できます。
$ENV{PATH} .= ':/home/user/dev/tools';
通常のように、設定は親プロセスのPATH変数を変更できず、スクリプト自体とその子プロセスのみを変更します。
Python スクリプトに正しいシェバン行 (たとえば#!
最初の行) が python を指している場合、これを行う必要はありませんsystem("python /home/user/dev/tools/python.py")
- それだけsystem("/home/user/dev/tools/python.py")
で十分です。
そうすれば、Python 検索に頼る必要はありません$PATH
。
次に、$PATH を変更できます。
local $ENV{PATH} = $ENV{PATH} ? "$ENV{PATH}:/home/user/dev/tools"
: "/home/user/dev/tools";
system("python.py");
(プログラムの他の場所の PATH に影響を与えないように、これを必ずローカライズしてください)
アップデートに関しては、
perl.pl で $ENV を設定しても影響はありません。$export PATH=$PATH:/home/user/dev/tools で、シェルから $python.py を実行すると動作します。
それは真実ではない。それが機能する場合は、Perlを設定し$ENV{PATH}
て実行することもできます。python.py
local $ENV{PATH} = "$ENV{PATH}:/home/user/dev/tools";
system("python.py");