use File::Temp qw/tempfile/;
my ($tfh,$tfn) = tempfile(UNLINK=>1);
print $tfh $contents;
close $tfh;
# File named $tfn will exist till end of program
####
use File::Basename qw/fileparse/;
use File::Temp qw/tempfile/;
my ($fn,$dir,$ext) = fileparse($filename, qr/\.[^.]+$/);
my ($tfh,$tfn) = tempfile(DIR=>$dir, TEMPLATE=>'.'.$fn.'_XXXXXXXXXX',
SUFFIX => $ext, UNLINK=>1 );
...
##
##
use File::Temp qw/tempdir/;
use File::Basename qw/fileparse/;
use File::Spec::Functions qw/catfile/;
my $tmpdir = tempdir(CLEANUP=>1);
my $tfn = catfile($tmpdir, scalar fileparse($filename));
...
# - OR -
my ($fn,$dir) = fileparse($filename);
my $tmpdir = tempdir(DIR=>$dir, TEMPLATE=>'.XXXXXXXXXX', CLEANUP=>1 );
my $tfn = catfile($tmpdir, $fn);
...