use Time::HiRes qw/time/; # Code will work without this, but works better with my @timers; sub addTimeout { my ($timeout, $callback, $calldata) = @_; push @timers, { when => time()+$timeout, callback => $callback calldata => $calldata }; @timers = sort { $a->{when} <=> $b->{when} } @timers; }