2017-02-10 90 views
0

我有一個perl腳本,我將其用作包裝器。 perl腳本從用戶收集參數,然後使用參數作爲數組調用子腳本。將參數傳遞給來自Perl的子腳本

我遇到的問題是,當執行子腳本時,所有參數都在ARGV [1]中。是否有一些我可以使用的特殊分隔符?我真的不想在子腳本中循環一個數組;有種失敗的目的。

[KSH腳本]

Your Args 
ARG1: foo bar 
ARG2: 

但是我期待的結果是

Your Args 
ARG1: foo 
ARG2: bar 

我有推參數到一個數組和提供的參數作爲所述陣列。

[Perl的腳本]

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要麼傳遞一個字符串,將與一個外殼來解釋(和服從的參數由空格分開):

system 'command arg1 arg2'; 

或者你使用多個參數,就像你一樣。在這種情況下,第一個參數是程序,以下每個參數都是參數。

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

所以,既然你參加了所有的參數由一個字符串插值他們(與「@arg_entry」),那麼他們給予爲一體。解決方案很簡單,只是不插入,它們將正常插入參數列表中。

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

謝謝!我到達了互聯網的盡頭,尋找替代品來調用它。 第三代碼塊的第一行是答案! – Autonomic

+0

@JeremyWinslow很高興它整理出來。順便說一句,「'$ select_script」'和'「$ value」'的插值完全不需要,你可以直接使用這個變量。 – sidyll

+4

@JeremyWinslow在那裏很黑嗎? – simbabque