use Errno; OPEN: eval { open FH, '<', 'directory/myfile' or die $!; }; if ($@) { { $@ == EACCES and die $@; $@ == ENFILE and sleep(1), goto OPEN; warn $@; } }