我需要檢索Java程序的輸出並將其存儲在Perl變量中,以便我可以使用split函數。我正在使用java輸出,將可執行jar文件輸出存儲在Perl變量中
my @args = ("java", "-jar", "first.jar");
system(@args);
但是如何將這種@args
轉換成$args
變量(串),這樣我可以拆分從字符串輸出。
我需要檢索Java程序的輸出並將其存儲在Perl變量中,以便我可以使用split函數。我正在使用java輸出,將可執行jar文件輸出存儲在Perl變量中
my @args = ("java", "-jar", "first.jar");
system(@args);
但是如何將這種@args
轉換成$args
變量(串),這樣我可以拆分從字符串輸出。
我希望你需要存儲jar
文件的輸出。所以用backtick
代替系統。 試試就知道 system和Backtick/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
現在,我正面臨着另一個問題:我的java程序應該要求用戶輸入,它會被附加到「abc xyz」中,然後分割這三個將被完成, 假設java要求用戶輸入,它是「123」 和java的完整輸出是「abc xyz 123」 然後分裂將完成。它沒有得到輸出perl。我怎麼能做這個? – john
我不知道爲什麼你要轉換參數,但它看起來像它會很容易:
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的輸出,因爲一次只需要存儲一行。
什麼[加入](http://perldoc.perl.org/functions/join.html)功能可按'$字符串=加入( 「」 @參數);' – mkHun
實際上我的jar輸出在控制檯上是「abc xyz」,我想在不同的變量中存儲「abc」和「xyz」。我怎樣才能做到這一點? – john
用空格分隔數據。 '@output = split(/ \ s /,「abc xyz」);'now'$ output [0]'包含'abc'和'$ output [1]'包含'xyz' – mkHun