2

簡単なタスク:

次の行のスクリプトがあります。

qx(wget -P $destination $file) || die "i can't download file: $file!\n";

しかし、毎回 (成功したかどうかにかかわらず)、スクリプトは終了します。

慣用句の動作に変更するにはどうすればよいですか? (成功 - 生きる、ではなく - 死ぬ)

手伝ってくれてありがとう!

一部のエディション: すべてのログを知りたいので、次のような行を使用することを好みます:

print qx(...)||die"EXPLAIN";

4

1 に答える 1

10

qxバッククォート演算子を使用するのと同じです。実行中のプログラムの出力を返しますが、STDERR ではなく、その STDOUT のみを返します。wget は STDOUT に何も出力していないようです (STDERR で進行状況を報告します)。そのため、結果は空の文字列であり、Perl の意味では誤りであり、dieが呼び出されます。

通常、プログラムが成功したかどうかを判断するためにプログラムの出力を評価するのではなく、その終了ステータスを評価します。これは、ほとんどの Unix CLI プログラムが成功時に 0 を返すため、0と比較する$?ことで実行できます。

そもそも wget からの出力が必要ない場合は、代わりに使用しないqxでくださいsystem。プログラムの終了コードを直接返すため、die "oh noes!" if 0 != system("wget ...").

于 2012-11-22T10:49:24.813 に答える