Chapter 12. File Tests
Earlier, we showed you how to open a filehandle for output. Normally, that creates a new file, wiping out any existing file with the same name. Perhaps you want to check that there isn’t a file by that name. Perhaps you need to know how old a given file is. Or perhaps you want to go through a list of files to find which ones are larger than a certain number of bytes and have not been accessed for a certain amount of time. Perl has a complete set of tests you can use to find out information about files.
File Test Operators
Perl has a set of file test operators that let you get
particular information about files. They all take the form of -X, where the X represents the particular test (and there is
a literal -X file test operator too,
to confuse things a bit). In most cases, these operators return true or
false. Although we call these things operators, you’ll find their
documentation in perlfunc.[303]
Before you start a program that creates a new file, you might want
to ensure that the file doesn’t already exist so that you don’t
accidentally overwrite a vital spreadsheet data file or that important
birthday calendar. For this, you can use the -e file test, testing a filename for
existence:
die"Oops! A file called '$filename' already exists.\n"if-e$filename;
Notice that you don’t include $! in this die message, since you’re not reporting that the system refused a request in this case. Here’s an example of checking whether a file is being kept up-to-date. In this ...