2013-09-27 33 views
2

我的命令:如何參數傳遞給系統命令在Perl

system("start cmd.exe /k C:\\script.pl $arg1 $arg2 $arg3"); 

不正確地傳遞參數。什麼是正確的方法來做到這一點?

THX

+3

請解釋你期望發生什麼以及實際發生了什麼。定義「正確」和「不正確」 – Arkadiy

回答

8

調用system最好的辦法是用一個數組或列表:

my @args = ("start", "cmd.ex", "/k", "C:\\script.pl", $arg1, $arg2, $arg3); 
system @args; 

system "start", "cmd.ex", "/k", "C:\\script.pl", $arg1, $arg2, $arg3; 

與單一字符串system相比,節省的「如何報價參數」複雜性因爲shell沒有機會解釋它們。另一方面,如果你希望shell執行I/O重定向或管道,你可能不會使用這種機制。

+3

您不需要數組,您可以提供一個列表。 – tadman

+0

同意;你不正式需要一個數組變量。查看更新。 –

+1

使用'system'的列表形式將阻止perl啓動一個shell來運行'start',但在這種情況下,'start'然後只是運行'cmd.exe' shell,並且大部分好處都會丟失。也許'Win32 :: Console'也可以用來消除'start'。 – tjd