in reply to Best way to write in Perl
Here's another way: Open the file in "update mode", which lets you read and write at the same time. Read everything in and modify as before, then rewind the file pointer back to the beginning, write out the modified content, then close the file. The trick here is that if the new version is shorter than the original, you need to trim off the extra stuff on the end - that's what 'truncate' does. This will let you modify the file in place, with no backup. But it does assume that everything can be slurped into memory at one time, so it won't scale well for large input files.
use strict; # open in read/write mode open(DATA, "+< a.txt") or die "Cannot read $!"; my @info = <DATA>; foreach (@info) { $_ =~ s/NULL//g; $_ =~ s/ //g; } seek(DATA, 0, 0); # rewind back to beginning foreach(@info) { print DATA; } truncate(DATA, tell(DATA)); close(DATA);
|
|---|