Perl:qx或Die

时间:2012-11-22 10:40:55

标签: perl idioms

简单任务:

我有一个带有行的脚本:

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

但每次(如果成功与否),脚本都会死掉。

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

感谢您的帮助!

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

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

1 个答案:

答案 0 :(得分:10)

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

通常,您不评估程序的输出以确定它是否已成功,但是它的退出状态。这可以使用comparing $? to 0来完成,因为大多数Unix CLI程序在成功时返回0。

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