2012-11-05 82 views
0

我寫一個跨平臺的構建腳本中的Perl代碼編譯設置。導入環境變量通過批處理文件父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"); 
     } 
} 

通過執行批處理文件丟失的解釋設置環境變量產生另一個shell執行批處理文件。

我怎樣才能導入父Perl腳本的變量?

+0

順便說一句,如何一個變量可以是具有恆定串被串聯後一個空字符串?情況總是如此。 – choroba

+0

耶無用的檢查...最初我在檢查後追加了變量... :) – Dexter

回答

1

如果你的BAT文件是簡單的(即它只包含格式爲VAR=VALUE的行),你可以用Perl解析它。如果還有更多事情正在進行(某些值是從其他值計算的),則只需在BAT腳本末尾以VAR=VALUE的形式輸出所有變量名稱及其值。

簡單格式的解析很簡單:

while (<$BAT>) { 
    chomp; 
    my ($var, $val) = split /=/, $_, 2; 
    $ENV{$var} = $val; 
} 
+0

我試着以key = value的形式讀取批處理文件。然而,似乎是,批處理文件(它的一個文件MSVC)具有的形式%VAL%= 值:%VAL%。在這種情況下,我不打包閱讀正確和完整的值。我無法修改批處理文件。只能讀懂, – Dexter

1

正如你所說,使用system將設置環境變量在子進程中,而不是在當前進程。問題是,你必須在「蝙蝠」的格式,這是一種不同的語言Perl的(好吧,也許稱其爲語言是有點強)的文件。

您需要可以自己解析該文件並把它翻譯成Perl或從.bat文件具有(例如)運行你的Perl:

CALL "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" amd64 
perl perlscript.pl 
相關問題