in reply to is filehandler used ?
First, my confusion: "filehandler" is something that handles files, and "filehandle" is a handle to a (or token for a) file. You have a filehandle.
Second, the solution: Using fileno works fine for files. On Linux/unix, it probably works for sockets, fifos, and many other things. On no platform does it work for IO::String or handles to a string buffer (e.g., open OUT, '>', \$buffer). If you are only worried about real files, that's fine.
Instead, you will pretty much need to keep the state seperate. For example, using a symref:
Now it doesn't matter what you have that you're reading from - failure results in an undef. (Not quite true - if you start using the forking version of open, such as "-|" or "|-", then things have to work a bit differently.)my $fh; open $fh, "<", "/etc/shadow" or $fh = undef; if ($fh) { # do stuff }
Personally, I just merge it all:
Anywhere inside the if, the filehandle is good. Anywhere outside, the filehandle doesn't even exist.if (open my $fh, "<", "/etc/shadow") { # do stuff. close $fh; }
In Section
Seekers of Perl Wisdom