2017-02-10 4 views
0

私は、私がラッパーとして使用しているperlスクリプトを持っています。 perlスクリプトは、ユーザーから引数を収集し、引数として配列として子スクリプトを呼び出します。Perlから子スクリプトにArgを渡す

問題は、子スクリプトを実行すると、すべての引数がARGV [1]にあることです。私が使うことができる特別なデリミタがありますか?私は本当に子スクリプト内の配列をループする必要はありません。一種の目的を破る。

[KSHスクリプト]

Your Args 
ARG1: foo bar 
ARG2: 

私が期待した結果が

Your Args 
ARG1: foo 
ARG2: bar 

あるしかし、私は配列に引数をプッシュし、アレイとして引数を提供しています。

[Perlのスクリプト] system

print "Enter $arg_array[$i]: "; 
my $value = <STDIN>; 
chomp $value; 
if (defined $value) { 
    push (@arg_entry, "$value"); #create args array to pass to selectd script 

    } 
    .... sometime later, in another function ...... 

    system("$select_script", "@arg_entry"); 

答えて

2

あなたがシェルで解釈される単一の文字列を渡す(および空白で引数の分離に従う)のいずれか:

system 'command arg1 arg2'; 

かあなたのように複数の引数を使用します。この場合、第1のパラメータはプログラムであり、以下の各パラメータは引数である。あなたは(「@arg_entry」で)、文字列でそれらを補間することによって、すべての引数に入社以来

system 'command', 'arg1', 'arg2'; 

ので、それらは一つとして与えられました。解は単純であり、補間しないで、引数リストに正常に挿入されます。

system 'command', @args; 
system($select_script, @arg_entry); 
+2

ありがとうございます!私はこれを呼び出すための選択肢を探してインターネットの終わりに達しました。 3番目のコードブロックの最初の行が答えでした! – Autonomic

+0

@JeremyWinslowそれが整理されてうれしいです。 '' $ select_script ''と' '$ value''の補間はまったく必要ではありませんが、変数を直接使うことができます。 – sidyll

+4

@JeremyWinslowはそこに非常に暗かったですか? – simbabque

関連する問題