10.2. Opening and Closing a Filehandle

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 10.4. 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 ...

Get Learning Perl, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.