2

简单的任务:

我有一个脚本:

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

但是每次(无论是否成功),脚本都会死掉。

我应该如何将其更改为成语行为?(成功——活,不——死)

感谢帮助!

一些版本:我想知道所有日志,所以我更喜欢使用这样的行:

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

4

1 回答 1

10

qx与使用反引号运算符相同。它返回正在执行的程序的输出,但只返回其 STDOUT,而不是 STDERR。wget 似乎没有在 STDOUT 上输出任何内容(它报告 STDERR 的进度),因此结果是一个空字符串,在 Perl 意义上是错误的 - 并且die被调用。

通常,您不会评估程序的输出以确定它是否成功,而是评估其退出状态。这可以通过与0进行比较$?来完成,因为大多数 Unix CLI 程序在成功时返回 0。

如果您首先不需要 wget 的输出,则不要使用qx,而是使用system。它直接返回程序的退出代码,允许您编写die "oh noes!" if 0 != system("wget ...").

于 2012-11-22T10:49:24.813 回答