web-dev-qa-db-ja.com

Perlで環境変数を設定するにはどうすればよいですか?

Perlで環境変数を設定するにはどうすればよいですか?

$HOMEをデフォルトとは別のディレクトリに設定したい。

18
user7305

あなたはこのようにそれを行うことができます:

_$ENV{HOME} = 'something different';
_

ただし、これはスクリプトの残りの部分でのみ効果があることに注意してください。スクリプトが終了すると、 呼び出し元のシェルには変更が表示されません

_perldoc -v %ENV_が言うように:

_%ENV_ハッシュ_%ENV_には、現在の環境が含まれています。 「ENV」に値を設定すると、後で「fork()」をオフにする子プロセスの環境が変更されます。

37
innaM
$ENV{'HOME'} = '/path/to/new/home';

perlrun も参照してください

8
David

Perlが開始されると、Perlは独自のサブシェルになります。そのサブシェルには、メインシェルでのみ使用可能なシェルファイルのソーシングなどのすべての機能が含まれているわけではありません。メインシェルの環境パスを設定することはできません。パスにアクセスする場所からシェルファイルがある場合は、コードでそれを使用できます。

Shell :: SourceであるCPANから外部モジュールをインストールすることでこれを行うことができます。

$env_path= Shell::Source->new(Shell=>"tcsh",file=>"../path/to/file/temp.csh");
$env_path->inherit;
print "Your env path: $ENV{HOME}";

Perlはシェルでの実行中に独自のインスタンスを作成するため、Perlのインスタンスはメインシェルのサブシェルのようになるため、メインシェルの環境パスを設定することはできません。子プロセスは、親の環境パスを設定できません。

これで、Perlのサブシェルが実行されるまで、temp.cshに存在するすべてのパスにアクセスできるようになります。

1
Mak_Thareja