【发布时间】:2015-12-02 20:20:28
【问题描述】:
我正在尝试在触发警报时重试某些逻辑。那可能吗。 我已将警报定义如下:
local $SIG{ALRM} = sub {
if($attempt <=5) {
print "NExt attempt\n";
$attempt = $attempt + 1;
my $val = subroutine_call();
} else{
Carp::confess "Die now\n";
}
我的代码 sn-p 如下:
foreach my $x (@array)
{
eval {
alarm(2);
my $val = subroutine_call();
alarm(0);
};
print "Moving on \n";
## some code
}
我希望在终止应用程序之前触发警报时重试调用 subroutine_call 最多 3 次。在调用 subroutine_call 后(无论是否在触发警报后调用),它应该显示打印语句。
我知道一旦触发警报并且通过警报定义进行 subrountine_call 并且它不会执行 print 语句,代码流将会偏离。我希望它的行为就像没有触发警报一样。
这可能吗?我很怀疑,但想知道是不是这样。
谢谢,
【问题讨论】:
标签: perl error-handling perl-module alarm