2016-05-13 7 views
3

Javaプログラムの出力を取得してPerl変数に格納して、分割機能を使用できるようにする必要があります。私は、実行可能なjar出力をPerlの変数に格納する

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

system(@args); 

を使用してJava出力を取得していますが、私は、文字列からの出力を分割することができるようにどのように$args変数(文字列)には、この@argsを変換します。何を引数"firstname lastname"を追加した場合...

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

をしかし、待っ:

+0

何(引数@ "")に参加= '$文字列funciton(http://perldoc.perl.org/functions/join.html)[参加]について;' – mkHun

+0

実際に私のjar出力はコンソール上で "abc xyz"です。私は "abc"と "xyz"の両方を別の変数に保存したいと思います。どうやってやるの? – john

+0

は、スペースを区切ってデータを分割します。 $ 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"に追加してからこれらの3つを分割する必要があります javaがユーザー入力を要求しているとし、それが "123" であり、javaからの完全な出力が "abc xyz 123" である場合、分割が完了します。これを行う? – john

0

あなたは引数を変換したい理由を私は知らないが、それはそれは簡単だろうように見えますか?

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

結果は次のようになります。

java -jar first.jar firstname lastname 

あなたの単一の名前の引数が2になります。正しい形式は次のようになります。

java -jar first.jar "firstname lastname" 

map助けることができる:

my $cmd = join(' ', map { "'$_'" } @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 $_ 
} 

最後のものは、出力全体を1つの変数または配列に解析する必要はありません。各ループ反復で1行を処理します。一度に1つの回線だけを格納する必要があるため、数百GBの出力を簡単に処理できます。

+0

私はこのスクリプトが初めてです。実際には、文字列データ型のperlのjavaコードからの出力が必要です。実行後に "abc xyz"を返します。my @args =( "java"、 "-jar"、 "システム(@args)のみで、jarファイルを実行します。 私にコードの行を教えてください。 – john

+0

答えとして表示されるとおり:If – Sebastian

関連する問題