2016-05-13 96 views
3

我需要檢索Java程序的輸出並將其存儲在Perl變量中,以便我可以使用split函數。我正在使用java輸出,將可執行jar文件輸出存儲在Perl變量中

my @args = ("java", "-jar", "first.jar"); 

system(@args); 

但是如何將這種@args轉換成$args變量(串),這樣我可以拆分從字符串輸出。

+0

什麼[加入](http://perldoc.perl.org/functions/join.html)功能可按'$字符串=加入( 「」 @參數);' – mkHun

+0

實際上我的jar輸出在控制檯上是「abc xyz」,我想在不同的變量中存儲「abc」和「xyz」。我怎樣才能做到這一點? – john

+0

用空格分隔數據。 '@output = split(/ \ s /,「abc xyz」);'now'$ output [0]'包含'abc'和'$ output [1]'包含'xyz' – mkHun

回答

1

我希望你需要存儲jar文件的輸出。所以用backtick代替系統。 試試就知道 systemBacktick/qx

之間

my @args = ("java", "-jar", "first.jar"); 

my $result = `@args`; 

my @ans = split(" ",$result); 

print "$ans[0] $ans[1]"; 
差假設你的結果是 xyz abc$ans[0]xyz$ans[1]商店 abc

+0

現在,我正面臨着另一個問題:我的java程序應該要求用戶輸入,它會被附加到「abc xyz」中,然後分割這三個將被完成, 假設java要求用戶輸入,它是「123」 和java的完整輸出是「abc xyz 123」 然後分裂將完成。它沒有得到輸出perl。我怎麼能做這個? – john

0

我不知道爲什麼你要轉換參數,但它看起來像它會很容易:

my $cmd = join(' ', @args); 

別急......如果你加什麼參數"firstname lastname"

my @args = ("java", "-jar", "first.jar", "firstname lastname"); 
my $cmd = join(' ', @args); 

其結果將是:

java -jar first.jar firstname lastname 

您的單一名稱參數會變成兩個。正確的形式是:

java -jar first.jar "firstname lastname" 

map可以幫助:

my $cmd = join(' ', map { "'$_'" } @args); 

(需要額外的努力,如果你的ARGS(可能)包含'引號)。

對於捕獲它的輸出,使用反引號或open

my $output = `$cmd`; # Multiline output in one variable 
my @output = `$cmd`; # Each output line in one array element 

# Read the output line by line saving memory 
open my $fh,'-|',$cmd; 
while (<$fh>) { 
    # Do something with a single output line in $_ 
} 

最後一個不需要將整個輸出解析爲單個變量或數組:它在每個循環迭代中處理一行。您可以輕鬆處理數百GB的輸出,因爲一次只需要存儲一行。

+0

我是這個腳本的新手。實際上我想從Perl中的java代碼中輸出字符串數據類型,它會在運行後給出「abc xyz」,我的@args =(「java」,「-jar」,「first。jar「); system(@args); 只能通過系統(@args),它會運行jar文件 請問你給我一套代碼行嗎? – john

+0

正如答案中所示:if – Sebastian

相關問題