http://www.perlmonks.org?node_id=148040


in reply to Re: Remove Blank Lines Off the End of a File
in thread Remove Blank Lines Off the End of a File

Don't use Perl if you don't want to read the whole file in
Sure you can do this in perl without reading the whole file. Here's some code (untested) (updated to fix a couple of mistakes).
#!/usr/bin/perl -w use strict; my $file = shift or die; open my $fh, "+<$file" or die "$!"; my $size = 4096; my ($cur_pos, $buf); seek $fh, -$size, 2; while (1) { $cur_pos = tell $fh; read $fh, $buf, $size; last if $buf =~ m/\S/s; seek $fh, -$size, 1; } $buf =~ m/(\s+)$/s; $cur_pos += $-[0]; truncate $fh, $cur_pos; close $fh; exit 0;
This will read only what is necessary and does not keep what it has already processed.

I am sure there are better ways of doing this.

/prakash

Update: I finally got some time and tested the above and found another bug (fixed in the code above). I was not supposed to use sysread and seek<code> together (<code>sysseek will probably do fine), so I changed the sysread to <code>read<code>, and it worked ok.

(Note to self: Never post untested code.)