in reply to Win32: timing out a perl subroutine

You can implement your own non pre-emptive timer fairly easily :

#! /usr/local/bin/perl -w use strict; { my $timesup = undef; sub timeout { if (@_) { # set the time to timeout on $timesup = time() + shift; } else { # return true as soon as we go over the limit return time() > $timesup; } } } # Programs code here timeout(10); # set to timeout in 10 seconds. my $timedout = 0; for (1..15) { # check if we can continue # If not, set flag to check later $timedout++ && last if timeout(); print "Do complicated thing, iter $_\n"; sleep(1); # pretend to do hard stuff } if ($timedout) { print "operation timedout\n"; } else { print "Success, complicated stuff completed\n"; }
Of course, being non-preemptive, this doesn't guarantee you'll get control back within a certain time, if the loop iteration takes to long, or the process blocks (e.g. waiting for user input).

Also assumes that other functions like alarm() aren't implemented, since these would be more robust, but the above is lightweight and may do what you need.

Update: I meant nonpre-emptive.
--
Brovnik