Итак, я немного осмотрелся здесь, а также на perl.org и perlmaven.com, но меня смущает то, что происходит с кодом, который я пытаюсь запустить. Я погуглил, что такое $ SIG, и нашел кое-что на здесь, что дает мне некоторое представление о том, что такое local $ SIG, но я все еще не понимаю, что он имел в виду под этим:
Perl имеет встроенный хэш% SIG, в котором ключи - это имена сигналов, доступных в вашей операционной системе. Значения - это подпрограммы (точнее, ссылки на подпрограммы), которые будут вызываться при поступлении определенного сигнала.
В дополнение к стандартным сигналам вашей операционной системы Perl добавил два внутренних сигнала. Один из них называется WARN и запускается каждый раз, когда какой-либо код вызывает функцию warn (). Другой называется DIE и срабатывает при вызове die ().
Здесь также говорится, что здесь, что мне не следует смешивать вызовы сна с вызовом будильника, но то, что там объясняется, мне кажется другим языком. Я запуталась. У меня проблемы с выходом из подпрограммы, чтобы она не умерла от меня. Я запускаю следующий код (я получил его из другого сообщения здесь, но я не хочу восстанавливать этот пост, поскольку он с 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 $@ eq "Alarm.\n";
warn "Timed out!\n" unless $previous_call_finished
}
return;
}
Моя программа просто умирает, и я не знаю, почему. Любая помощь будет оценена. Спасибо!