hOURS am Donnerstag, 30. November 2006 21:09:
> Jen Spinney <[EMAIL PROTECTED]> wrote: On 11/20/06, hOURS wrote:
> > Recently I posed a question on here regarding a program I have that
> > runs other programs (through require statements and what not). My
> > problem was that the programs getting run might have syntax errors and I
> > wanted to skip over each of those and go onto the next one. We figured
> > out a way to handle that. It turns out however, that these programs
> > sometimes have an even more troublesome problem: infinite loops. I knew
> > about this possibility, but figured I would just use the time function,
> > and if a program was taking to long, skip over it. Yeah, that wasn't so
> > smart. I can't have the main program check the elapsed time while the
> > required program is running its infinite loop. Or can I somehow? Any
> > ideas anybody? Thank you.
> > Fred Kittelmann
>
> Fred,
> Have you checked out the alarm function? I'm a beginner myself and I
> had a similar problem earlier today. alarm seemed to do it for me.
> Good luck!
>
> - Jen
>
> Thanks Jen,
> I've checked out alarm as much as I can. My PERL textbook scarcely
> mentions it. Trying "perldoc -f alarm" was a little more informative, but
> I still don't understand how to use this. Can anyone explain it to me?
> Fred
Does the following modified code example from 'perldoc -f alarm' helps?
Dani
#!/usr/bin/perl
use strict;
use warnings;
my $timeout=5; # secs
eval {
# Assign a signal handler subroutine which is invoked in case
# the alarm signal is sent
#
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
# "send an alarm signal after $timeout seconds!"
#
alarm $timeout;
# to test a non-timeout die, uncomment following line:
#die;
# the problem:
#
endless_loop();
# reset alarm timer: "Don't send alarm signal any more"
#
alarm 0;
};
# Check if the code within eval died because of an alarm signal
# or something else. We check the die message for that.
#
if ($@) {
if ($@ eq "alarm\n") {
warn "endless_loop() interrupted after timeout\n";
}
else {
warn "code in eval died!\n";
die;
}
}
warn "program continues...\n";
sub endless_loop { {} while 1 }
__END__
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>