BEGIN {
use IO::File;
use Fcntl;
my $temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMP} || $ENV{TEMP};
my $base_name = sprintf("%s/%d-%d-0000", $temp_dir, $$, time());
sub temp_file {
my $fh = undef;
my $count = 0;
until (defined($fh) || $count > 100) {
$base_name =~ s/-(\d+)$/"-" . (1 + $1)/e;
$fh = IO::File->new($base_name, O_WRONLY|O_EXCL|O_CREAT, 0644)
}
if (defined($fh)) {
return ($fh, $base_name);
} else {
return ();
}
}
}
Or you could simply use IO::Handle::new_tmpfile.