$loop_count = 10; while( ! $done and $loop_count-- ) { $done = is_it_done_yet(); sleep 1; } #### while( ! $done ) { eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 10; $done = is_it_done_yet(); alarm 0; }; last if @$ and $@ eq "alarm\n"; # hit alarm timeout sleep 1; }