use File::Temp; use File::Basename qw( basename ); use constant DEST_PATH => '/path/to/destination/'; use constant TEMP_PATH => '/tmp'; use constant TMP_TEMPLATE => 'prog_name.XXXX'; my $temp_fh = File::Temp->new( DIR => TEMP_PATH, TEMPLATE => TMP_TEMPLATE, UNLINK => 0 ); print "Temporary file created: ", $temp_fh->filename, "\n"; END{ my $new_filename = DEST_PATH . basename($temp_fh->filename) . '.html'; rename $temp_fh->filename, $new_filename or do{ $temp_fh->unlink_on_destroy; die $temp_fh->filename, " couldn't be renamed: $!\n", "It will be unlinked instead."; }; print "Temp file was renamed to $new_filename\n"; }