2012-02-03 115 views
3

我試圖perl的變量傳遞到系統命令,然後捕獲以後使用的輸出,這是我當前的代碼:發送perl的變量命令並捕獲輸出

my $updatedCmd = "|svn diff --summarize $svnOldFull $svnNewFull"; 
my $updatedUrls = ''; 
open UPDATES, $updatedCmd or die "Can't get updates"; 
while(<UPDATES>) { 
    print $_; 
} 

print "THIS_SHOULD_OUTPUT_AT_THE_END\n"; 

與此問題是我得到的輸出:

THIS_SHOULD_OUTPUT_AT_THE_END 
A  /test 
A  /test2 
A  /deployment.txt 

我希望能夠讓我不過Perl腳本,再往前走之前捕獲所有命令的輸出。

回答

3

您將管道放在命令錯誤的一端。試試這個:

my $updatedCmd = "svn diff --summarize $svnOldFull $svnNewFull|"; 
+0

ahh完美謝謝:) – DanH 2012-02-03 09:46:53

5

更現代的方式做到這一點是:

my @cmd = qw(svn diff --summarize), $svnOldFull, $svnNewFull; 
    open my $pipe, '-|', @cmd or die "oops: $!"; 
    while (<$pipe>) { ... } 

優勢

  • 沒有全局

  • 從文件/命令

    開放式分離

  • 作爲數組的命令,所以沒有必要在shell引用