Not really; many platforms allow additional settings to provide/forbid access not taken into account by -r, so the easiest way is actually to try the open. The problem with that is that some other error may crop up and you'll never find out about it because you are ignoring all errors; you may want to ignore only permissions errors and carp on any others:
use Errno;
if (open $fh, "<", "foo/bar/baz") {
...
} elsif ($!{EPERM}) {
print "no go!\n";
} else {
print "error opening foo/bar/baz: $!";
}
Of course, to be
really uptight about complaining about unexpected errors but ignoring lack of read permission to the file, you should go on to make sure the EPERM didn't result from lack of access to one of the directories traversed, but I'm not going there...