in reply to enforce timeout in loop

It sounds as if you know your maximum sleep time upfront. If this is the case you can:
# off hand code foreach my $sleepval ( @sleepvals) { sleep( $sleepval < $maxsleep ? $sleepval : $maxsleep); print strftime "%H:%M:%s", localtime; print "\n"; }