7.11.3. Discussion
The File::Temp module's functions are the best way to make temporary
files. For one thing, they're extremely easy to use. For another,
they're more portable than direct calls to the operating system. But
perhaps of greatest importance is the care they take in security
matters both various and subtle, especially those involving race
conditions.
Although this module provides a handful of slightly different
functions for creating a temporary file, most are there simply to
support legacy interfaces; few users will need more than the basic
tempfile( ) function. This function safely and
atomically creates and opens a brand new, empty file in read-write
mode. In scalar context, it returns a filehandle to that temporary
file; in list context, it returns the handle and pathname of the
temporary file:
use File::Temp qw(tempfile);
# just the handle
$fh = tempfile( );
# handle and filename
($fh, $filename) = tempfile( );
The tempfile function optionally accepts an
argument containing a template and then named arguments in pairs.
Named arguments specify such things as the directory to use instead
of the current directory, that a specific file extension should be
used, and on systems that support such a thing, whether the tempfile
should be immediately unlinked before its handle is returned. (Files
whose names have already been deleted from the filesystem are
especially difficult for the guys with the black hats to find.) Any
trailing X characters in the template are replaced by random
characters in the final filename. You might use this feature if you
need a temporary file with a specific extension.
($fh, $filename) = tempfile(DIR => $dir);
($fh, $filename) = tempfile($template);
($fh, $filename) = tempfile($template, DIR => $dir);
($fh, $filename) = tempfile($template, SUFFIX => ".dat");
($fh, $filename) = tempfile($template, UNLINK => 1);
Unless you specify OPEN => 0, the temporary
file will be deleted automatically when your program finally exits or
the file is closed.