2012-04-30 23 views

回答

4

你可能需要調用system,這是最有效的傳遞參數列表,從而避免了使用shell解析命令行。一個電話如

my $status = system 'command', @arguments; 

應該做你所需要的。

+0

有關錯誤處理的更好方法,請參閱http://stackoverflow.com/a/3478060。 – daxim

1

通常有大部分功能接受來啓動程序有兩種形式:

  • 接受的路徑和參數列表
  • 接受一個shell命令。

第一個更安全,需要更少的資源。

system($prog, @args);    # @args > 0 
system({ $prog } $prog, @args); # @args >= 0 

但是如果你必須使用的shell,或者如果你必須提供一個shell命令,有String::ShellQuote(如果你是在UNIX系統上)或Win32::ShellQuote(如Win32系統上)來幫助你。

use String::ShellQuote qw(shell_quote); 
my $shell_cmd = shell_quote($prog, @args); 
system($shell_cmd); 
+0

注意:您實際上不需要使用數組。對於'system'和'shell_quote',任何導致列表(包括列表文字)的表達式都是可以接受的。 – ikegami

+0

@daxim,oo!不知道Win32 :: ShellQuote。 – ikegami