my $n_secs = 30; #seconds after which we die.
my $start = time;
## each iteration of this loop is short, but the whole
## thing is long
while ( $some_condition ) {
die 'We ran too long!' if time-$start >= $n_secs;
## do stuff ##
}
####
package RunKiller;
sub new {
my $self = shift;
my $obj = { timer => time(), length => shift };
bless $obj, $self;
return $self;
}
sub check {
my $self = shift;
die 'Ran too long!' if time-($self->{timer}) >= $self->{length};
}
1;
####
require RunKiller;
my $runtimer = RunKiller->new(30); #30s run length.
while (1) {
$runtimer->check();
## do something ##
}