use IO::Select; my $s = IO::Select->new(); $s->add(\*FILE); my @ready = $s->can_read(1800); # 60*30 seconds = 30 minutes foreach (@ready) { # read your handle }