#!/usr/bin/perl use File::Temp; use strict; use warnings; my @data = qw/a b c d e f g h i j k l m n o p/; my $file="/tmp/foo.txt"; my (undef, undef, $mode, undef, $uid, $gid) = stat("$file"); $mode = sprintf( "%04o", $mode & 07777); my $tmp = File::Temp->new( TEMPLATE => 'tempXXXXX', DIR => '/tmp', SUFFIX => '.foobar', UNLINK => 1 ); chmod(oct($mode), $tmp) or die("Could not change tempfile to mode $mode.\n"); for my $d (@data) { print $tmp $d,"\n"; } rename($file, "$file.orig") or die("Could not rename original file, '$file': $!\n"); rename($tmp, "$file") or die("Could not rename temporary file handle: $!\n"); close($tmp); exit(0);