Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages
Out(3) User Contributed Perl Documentation Out(3)

Time::Out - Easily timeout long running operations

  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

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

'timeout' returns whatever the code placed inside the block returns:
  use Time::Out qw(timeout) ;
  my $rc = timeout 5 => sub {
        return 7 ;
  } ;
  # $rc == 7

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 {
        # ...
  } ;

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" ;

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

Patrick LeBoutillier, <>

Copyright 2005-2008 by Patrick LeBoutillier
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
2009-05-04 perl v5.28.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.