Timothy Johnson wrote: > Except that it will essentially create a new file. Why did you want > to avoid writing a new file? As far as I know, you can't just > "erase" data in the middle of a file. That's just not how they work. > Someone correct me if I'm wrong. As far as I know, any program that > does this rewrites the file. The only thing that is somewhat similar > is that you can do a sysread and change part of a file, but I don't > think you can remove part of a file without rewriting it.
You are correct. The only way to remove data from the middle of a file is to rewrite the remainder of the file starting from the point of removal. You can remove the blank lines 'in-place' without writing to a second file (which is what Perl's -i does), but you have to do some file pointer manipulation. Here's an example: #!/usr/bin/perl use strict; use Fcntl qw(:seek); squeeze(shift @ARGV) while @ARGV; sub squeeze { my $fname = shift; open F, "+<$fname" or die "Couldn't open $fname: $!\n"; my ($p1, $p2); $p1 = $p2 = tell(F); while (<F>) { $p2 = tell(F); next if /^$/; seek(F, $p1, SEEK_SET); print F $_; $p1 = tell(F); seek(F, $p2, SEEK_SET); } truncate(F, $p1); close(F); } Frankly, the one-liner with perl -i is much preferred. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]