use Time::HiRes qw[ time sleep ]; ... $inotify->blocking(0); my $end = time() + $timelimit; while( time() < $end ) { for my $event ( $inotify->read ) { ## process event. } sleep 0.01; ## or 0.001 per your latency requirements }