2012-12-11 18 views
0

我需要允許用戶在運行我的perl腳本時輸入任何內容,因爲我的腳本以不同的增量將所有數據發送到另一個非自定義腳本。Perl,將變量設置爲整個命令行'string'而不是參數

從理論上講,我希望這會發生:

perlscript "this is" -t stuff\n4^./q% 

然後,在perlscript,具有:

print "Full: $full_command"; 

導致:

Full: "this is" -t stuff\n4^./q% 

,使任何感?我已經試過的東西沒有完全符合我正在尋找的argv或類似的東西。

感謝您的幫助, 添

+2

殼牌解析命令 - 殼行,然後運行perl腳本和解析的腳本。沒有辦法從perl腳本中知道原始的命令行。 – yasu

回答

4

外殼做了相當於

exec('perlscript', 'this is', '-t', 'stuff'.chr(0x0A).'4&^./q%'); 

有沒有辦法perl可生產從原來的shell命令。如果你想要Perl收到

"this is" -t stuff\n4^./q% 

你需要告訴使用類似

perlscript '"this is" -t stuff\n4^./q%' 

(好吧,至少在源性殼或衍生物。)

2

不幸的是,你的shell可能操縱你的論點之前,他們甚至得到了Perl腳本。在您的具體示例中,像bash這樣的shell會刪除引號,將\n視爲n,並在到達&後停止處理該行。在Unixy系統,你最好的選擇可能是包裝所有的參數在單引號

perlscript '"this is" -t stuff\n4&^./q%' 
-1

假設你正確引用您的操作系統,如上面提到的,或許下面就爲你工作:

print join(" ", map {// ? "\"$_\"" : $_ } @ARGV); 

請注意,當您運行perl時,需要使用「 - 」標記將用於perl本身的參數與程序的參數分開。例如:

perl -- -t 'stuff...' 

這樣可以防止論據被perl本身錯誤地佔用。

+0

您的'print'不會爲給出的示例生成請求的輸出。答案的後半部分與這個問題無關。 – ikegami

+0

第二部分不相關? OP指定他希望用戶「輸入任何內容」。他不需要防止perl將用戶輸入解釋爲perl參數嗎? – schtever

+1

@schtever指定腳本名稱的參數將阻止perl將任何更多參數解釋爲perl解釋器的選項。 – qqx

相關問題