1
我試圖在報警觸發時重試某些邏輯。那可能嗎。 我已經定義報警如下:Perl在報警時重試
local $SIG{ALRM} = sub {
if($attempt <=5) {
print "NExt attempt\n";
$attempt = $attempt + 1;
my $val = subroutine_call();
} else{
Carp::confess "Die now\n";
}
我的代碼片段如下:
foreach my $x (@array)
{
eval {
alarm(2);
my $val = subroutine_call();
alarm(0);
};
print "Moving on \n";
## some code
}
我想要重試調用subroutine_call高達3次報警時終止應用程序之前觸發。調用subrountine_call(不管是否在警報觸發後調用它),它應該顯示打印語句。
我知道,一旦警報被觸發,並且通過警報定義觸發了subrountine_call,代碼流就會偏離,並且它不會執行打印語句。如果報警不會觸發,我希望它表現得好像它會有的一樣。
這可能嗎?我很懷疑,但想知道是否是這樣。
感謝,
感謝。這工作。但是這個問題。在應用程序死亡3次後,顯示的錯誤信息是「超時」,這是公平的。什麼是重要的本地$ SIG {ALRM} =子{死「報警\ n」; };聲明涉及此?終止時不打印「警報」。我相信它應該打印$ SIG {ALRM}中提到的消息,而不是在嘗試耗盡時顯式死亡。 – learningMyWayThru
恩,如果你不喜歡這個消息,或者想要做一些除了死亡之外的事情,沒有什麼能阻止你。 //區分超時和其他例外。 – ikegami