Time::Out - Easily timeout long running operations


Time-Out documentation  | view source Contained in the Time-Out distribution.

Index


NAME

Top

Time::Out - Easily timeout long running operations

SYNOPSIS

Top

  use Time::Out qw(timeout) ;

  timeout $nb_secs => sub {
    # your code goes were and will be interrupted if it runs
    # for more than $nb_secs seconds.
  } ;
  if ($@){
    # operation timed-out
  }




DESCRIPTION

Top

Time::Out provides an easy interface to alarm(2) based timeouts. Nested timeouts are supported.

RETURN VALUE

'timeout' returns whatever the code placed inside the block returns:

  use Time::Out qw(timeout) ;

  my $rc = timeout 5 => sub {
	return 7 ;
  } ;
  # $rc == 7




Time::HiRes

Top

If Time::Out sees that Time::HiRes has been loaded, it will use that 'alarm' function (if available) instead of the default one, allowing float timeout values to be used effectively:

  use Time::Out ;
  use Time::HiRes ;

  timeout 3.1416 => sub {
	# ...
  } ;




BUGS

Top

Blocking I/O on MSWin32

alarm(2) doesn't interrupt blocking I/O on MSWin32, so 'timeout' won't do that either.

@_

One drawback to using 'timeout' is that it masks @_ in the affected code. This happens because the affected code is actually wrapped inside another subroutine that provides it's own @_. You can get around this by specifically passing your @_ (or whatever you want for that matter) to 'timeout' as such:

  use Time::Out ;

  sub test {
    timeout 5, @_ => sub {
      print "$_[0]\n" ;
    } ;
  }

  test("hello") ; # will print "hello\n" ;

SEE ALSO

Top

eval, closures, alarm(2), Sys::AlarmCall

AUTHOR

Top

Patrick LeBoutillier, <patl@cpan.org>

COPYRIGHT AND LICENSE

Top


Time-Out documentation  | view source Contained in the Time-Out distribution.