0

コードのコンパイルのために、Perl でクロスプラットフォームのビルド スクリプトを作成しています。

Windows では、vsvars32.bat を実行して環境変数を設定する必要があります。

sub set_win_env {
      #MSVC version 9.0 is installed
      $VS90COMNTOOLS = $ENV{'VS90COMNTOOLS'};
      $VS90COMNTOOLS .= "vsvars32.bat"
      if($VS90COMNTOOLS ne "") {
          system("$VS90COMNTOOLS");
      }
 }

バッチ ファイルを実行することによって設定された環境変数は、インタプリタが別のシェルを起動してバッチ ファイルを実行すると失われます。

これらの変数を親 Perl スクリプトにインポートするにはどうすればよいですか?

4

2 に答える 2

1

あなたが言うように、使用systemすると、現在のプロセスではなく、子プロセスに環境変数が設定されます。問題は、Perl とは異なる言語である「.bat」形式のファイルがあることです (OK、言語と呼ぶのは少し強いかもしれません)。

ファイルを自分で解析して Perl に変換するか、(たとえば) 次のような .bat ファイルから perl を実行する必要があります。

CALL "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" amd64
perl perlscript.pl
于 2012-11-05T13:03:49.803 に答える
1

BAT ファイルが単純な場合 (つまり、フォームの行のみが含まれている場合VAR=VALUE)、Perl で解析できます。さらに何かが行われている場合 (一部の値が他の値から計算されるなど)、すべての変数名とその値を BAT スクリプトの最後に .xml 形式で出力するだけVAR=VALUEです。

単純な形式の解析は簡単です。

while (<$BAT>) {
    chomp;
    my ($var, $val) = split /=/, $_, 2;
    $ENV{$var} = $val;
}
于 2012-11-05T13:09:30.940 に答える