Итак, я занимаюсь поиском здесь, а также на perl.org и perlmaven.com, но я смущен тем, что происходит с кодом, который я пытаюсь бежать. Я гугле, что $ SIG это и нашел что-то на here, что дает мне немного идея о том, что местный $ SIG это, но я до сих пор смущает то, что он имел в виду под этим:Perl: Позвоните подпрограмму Каждые 15 секунд
Perl имеет встроенный хэш с именем% SIG, в котором ключи являются именами сигналов, доступных в вашей операционной системе. Значения - это подпрограммы (более конкретно ссылки на подпрограммы), которые будут вызываться, когда поступает конкретный сигнал.
В дополнение к стандартным сигналам вашей операционной системы Perl добавил два внутренних «сигнала». Один из них называется WARN и запускается каждый раз, когда какой-то код вызывает функцию warn(). Другой называется DIE, и он запускается при вызове функции die().
Он также говорит о here, что я не должен смешивать вызовы сна в течение вызова тревоги, но то, что объяснить, похоже, как и другой язык для меня. Я в замешательстве. У меня возникли проблемы с выходом из подпрограммы без того, чтобы она не умирала от меня. код, который я бегу это (я получил его от другого поста здесь, но я не хочу, чтобы оживить этот пост, как это с 2011 года):
sub checkfind {
didfindchange;
while ($call_counter <= 20) {
my $previous_call_finished = 0;
eval {
local $SIG{ALRM} = sub { die "Alarm.\n" };
alarm 15;
if ($did_find_change eq "false") {
didfindchange;
print("Original FIND value: $original_find_value\n");
print("FIND value: $ems_find_value\n");
}
elsif ($did_find_change eq "true") {
print("FIND changed.\n");
print("Original FIND value: $original_find_value\n");
print("FIND value: $ems_find_value\n");
$previous_call_finished = 1;
}
sleep;
};
#Propagate unexpected errors.
die unless [email protected] eq "Alarm.\n";
warn "Timed out!\n" unless $previous_call_finished
}
return;
}
Моя программа просто продолжает умирать, и я «Не знаю, почему. Любая помощь будет оценена по достоинству. Спасибо!
почему вы спать? если на то пошло, опишите на английском то, что вы пытаетесь сделать – ysth
Я хочу называть didfindchange() каждые 15 секунд. Если значение FIND изменится, выйдите из подпрограммы. Если значение FIND не изменяется, завершение работы по истечении пяти минут истекает. Я вызываю sleep(), потому что по какой-то причине подпрограмма просто умирает, если я этого не делаю. @ysth –