我目前正在修改一個執行多個shell命令的Perl腳本,並且對於其中的一些命令,捕獲輸出以供進一步處理。我想分解在子例程中執行外部命令的代碼。我寫了下面的子程序:從子線程執行外部命令(並讀取其輸出)
sub execute_command {
my $cmd = shift;
Log("executing command $cmd ...");
system($cmd);
my $app = ($? == -1) ? $? : $? >> 8;
if ($app != 0) {
Log("error executing command $cmd");
return $FAILURE;
}
Log("done");
return $SUCCESS;
}
sub execute_command_and_get_output {
my $cmd = shift;
Log("executing command $cmd ...");
unless (open(CMD, "$cmd|")) {
Log("error executing command $cmd");
return undef;
}
my @cmd = <CMD>;
close(CMD);
Log("done");
return @cmd;
}
問題:
execute_command
應該在錯誤的情況下執行該命令傳遞和返回$SUCCESS
如果一切正常,或$FAILURE
。我是否正確測試$?
?execute_command_and_get_output
應執行傳遞的命令並將輸出作爲數組返回(包含輸出行);如果命令的執行失敗,則應返回undef
。使用unless (open(CMD, "$cmd|")) { ... }
來測試命令執行中的錯誤條件是否正確?
除了我的兩個問題的答案,任何改善建議表示讚賞。
感謝您的回答:我很欣賞的想法,但是我更喜歡從'execute_command_and_get_output'返回多個值,我也不行多使用反引號的。 – MarcoS