Perl provides three filehandles, STDIN
, STDOUT
, and STDERR
, which are automatically open to files or devices established by the program's parent process (probably the shell). You use the open
function to open additional filehandles. The syntax looks like this:
open(FILEHANDLE
,"somename
");
where FILEHANDLE
is the new filehandle and somename
is the external filename (such as a file or a device) that will be associated with the new filehandle. This invocation opens the filehandle for reading. To open a file for writing, use the same open
function, but prefix the filename with a greater-than sign (as in the shell):
open(OUT
, ">outfile
");
We'll see how to use this filehandle in the upcoming section "Using Filehandles." Also, as in the shell, you can open a file for appending by using two greater-than signs for a prefix, as in:
open(LOGFILE
, ">>mylogfile
");
All forms of open
return true for success and false for failure. (Opening a file for input fails, for example, if the file is not there or cannot be accessed because of permissions; opening a file for output fails if the file is write-protected, or if the directory is not writable or accessible.)
When you are finished with a filehandle, you may close it with the close
operator, like so:
close(LOGFILE);
Reopening a filehandle also closes the previously open file automatically, as does exiting the program. Because of this, many Perl programs don't bother with close
. But it's there if you want to be tidy or make sure that all of the data is flushed out sometime earlier than program termination. A close
call could also fail if the disk filled up, the remote server that held the file became inaccessible, or any of various other esoteric problems occurred. It's a good idea to check the return values of all system calls.