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 reply to Re: is filehandler used ?
by Tanktalus
in thread is filehandler used ?
by jeanluca
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |