【发布时间】:2016-06-14 16:07:49
【问题描述】:
我有一个自动从各种来源下载内容的 Perl 脚本。它使用alarm 在eval 块中进行下载,这样如果时间过长,尝试就会超时:
eval {
alarm(5);
my $res = $ua->request($req);
$status = $res->is_success;
$rawContent = $res->content;
$httpCode = $res->code;
alarm(0);
};
这已经工作了多年,但是在进行了一些系统更新后,它突然停止工作。相反,它遇到的第一个源超时,我收到以下错误并且程序终止:
Alarm clock
我做错了什么导致eval 无法突然收到警报?
【问题讨论】:
-
“一些系统更新” - 需要说明吗?
-
如果你使用LWP::UserAgent,那么最好设置
$ua->timeout(5)而不是使用alarm -
“这已经工作了很多年,但是在做了一些系统更新之后,它突然停止工作了” 我想@Amias 会对此感兴趣
-
@tjd 我使用 yum 和 cPanel/WHM(它是一个网络托管环境)进行了大量更新。不幸的是,我没有所有更新的列表。
-
@Borodin,我不记得我第一次写这篇文章时使用警报的原因。也许我应该再探索一下。