在 Perl 中有三種方式來調用外部程序。
## `system()`?返回程序的退出狀態
~~~
my $rc = system("/bin/cp $file1 $file2"); # returns exit status values
die "system() failed with status $rc" unless $rc == 0;
~~~
如果可能,用列表傳遞你的參數,而不是用單個的字符串。
~~~
my $rc = system("/bin/cp", $file1, $file2 );
~~~
如果?`$file1`?或?`$file2`?有空格或其他特殊字符,這將確保不會在 Shell 中出錯。
`system()`?的輸出不會被捕獲。
## 反引號(\`\`)和?`qx()`?操作符返回程序的輸出
當你想要輸出時,使用:
~~~
my $output = `myprogram foo bar`;
~~~
你將需要檢查?`$!`?中的錯誤代碼。
如果你使用反引號或?`qx()`,首選?_IPC::Open2_?或?_IPC::Open3_?代替,因為 它們將給你相同的參數控制,并允許你捕獲輸出。
`IPC::Open3`?是在 Perl 中不使用 Shell 命令來捕獲?`STDERR`?的僅有方法。