cpan beginner

How to create temporary directory with File::Temp in Perl?

Question

How to create temporary directory with File::Temp in Perl?

Creating a temporary directory in Perl can be done efficiently using the core module File::Temp. This module is part of Perl's standard distribution and provides methods to safely create temporary files and directories with automatic cleanup options, which reduces common pitfalls like filename collisions or lingering temporary files.

Using File::Temp to Create a Temporary Directory

The method tempdir() from File::Temp is designed to create temporary directories. It returns the path of the newly created directory, which you can then use in your program. By default, the directory will be created in the system temporary folder (like /tmp on Unix or C:\Windows\Temp on Windows), but you can specify a different location if needed.

One important feature is the CLEANUP option. If set to true, the temporary directory and its contents are automatically removed when the program exits, which helps prevent clutter and security issues.

Key Points About File::Temp and Temporary Directories

  • Safety: File::Temp avoids race conditions by creating unique directories or files securely.
  • Automatic cleanup: Using CLEANUP => 1 ensures the directory is removed when your script finishes.
  • Custom location: You can specify the parent directory where the temp directory will be created.
  • Context: The created directory path is returned as a scalar string.
  • Version compatibility: Available in core Perl from 5.6 and onwards, with no special requirements.

Example: Creating a Temporary Directory with File::Temp


use strict;
use warnings;
use File::Temp qw(tempdir);

# Create a temporary directory that will be deleted at script exit
my $temp_dir = tempdir(CLEANUP => 1);

print "Temporary directory created: $temp_dir\n";

# You can create files or subdirectories inside $temp_dir
my $temp_file = "$temp_dir/example.txt";

open my $fh, '>', $temp_file or die "Cannot open $temp_file: $!";
print $fh "Hello, this is inside the temp directory!\n";
close $fh;

print "Wrote a file inside: $temp_file\n";

# When the script exits, the temp directory and its contents will be removed automatically.

Common Pitfalls and Tips

  • Don't forget the CLEANUP => 1 if you want the directory removed automatically. Without it, you must remove it manually.
  • If you need to keep the temp directory after your script exits (for debugging or other reasons), omit CLEANUP or set it to 0.
  • The temporary directory is created with secure permissions to prevent unauthorized access.
  • You can pass TEMPLATE option to control the naming format of the directory.
  • Remember to use File::Temp qw(tempdir); to import the function directly rather than calling File::Temp->tempdir().

In summary, File::Temp is the safest and easiest way to create temporary directories in Perl scripts that need to handle temporary data securely and cleanly.

Verified Code

Executed in a sandbox to capture real output. • v5.34.1 • 53ms

Tip: edit code and use “Run (Browser)”. Server runs always execute the published, verified snippet.
STDOUT
Temporary directory created: /var/folders/bk/m6c3msl54cv7160sw1thfxm40000gn/T/raMXoMu6Ra
Wrote a file inside: /var/folders/bk/m6c3msl54cv7160sw1thfxm40000gn/T/raMXoMu6Ra/example.txt
STDERR
(empty)

Was this helpful?

Related Questions