現在、いくつかのシェルコマンドを実行するPerlスクリプトを変更しています。私はサブルーチンで外部コマンドを実行するコードを除外したい。エラーの場合に$FAILURE
を渡されたコマンドを実行し、すべてがOKであれば$SUCCESS
を返す、または必要がありますサブルーチンから外部コマンドを実行して(その出力を読み取る)
execute_command
: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; }
質問:私は、次のサブルーチンを書きました。正しい方法で
$?
をテストしていますか?は、渡されたコマンドを実行し、出力を配列(出力行を含む)として返す必要があります。コマンドの実行に失敗した場合は、
undef
を返します。コマンド実行のエラー状態をテストするのに、unless (open(CMD, "$cmd|")) { ... }
を使用するのは正しいですか?
私の2つの質問に対する回答に加えて、改善のための提案は高く評価されます。
あなたの答えをありがとう:私は、しかし、私はexecute_command_and_get_output' 'から複数の値を返すことを好む、と私は多くのバッククォートの使用を行いない、アイデアを感謝しています。 – MarcoS