in reply to lack an adequate understanding of (at least) the seek function

Why seek at all in this situation? Why not:

#!/usr/bin/perl -w # use strict; my @messagesIn; my $MAXSAVE = 12; my $name = "Duane Wade"; my $subject = "My Career"; my $message = "No one ever thought I'd be this good."; flock("messageTest.txt",2); open(FROMFILE,"<messageTest.txt"); while (<FROMFILE> and $cnt++ < $MAXSAVE ) # just quit reading when you + have enough { # chomp; you put the line ending back when you write it so don't +bother taking it off push @messagesIn, $_; } close(FROMFILE); flock("messageTest.txt",8); open (TOFILE,">>messageTest.txt"); flock("messageTest.txt",2); seek(TOFILE,0,0); # shove your message at the start of the array unshift @messageIn, "$name|$subject|$message\n"; # print TOFILE "$name|$subject|$message\n"; # my $counter = 0; # while ( $counter < @messagesIn ) print TOFILE @messageIn; # foreach (@messagesIn) # { # print TOFILE; # } # # truncate(TOFILE, tell(TOFILE)); flock("messageTest.txt",8); close (TOFILE); 1;
That does what I think you're after.

Edit by castaway - replaced pre tags with code tags

  • Comment on Re: lack an adequate understanding of (at least) the seek function
  • Download Code

Replies are listed 'Best First'.
Re^2: lack an adequate understanding of (at least) the seek function
by o2bwise (Scribe) on May 23, 2005 at 21:23 UTC
    mikeraz,

    Thanks, man!

    I learned a few things from your reply and the combination of your reply and jeffa's was real helpful as he showed a whole different approach while your approach was conducive to my attempt.

    Though, I confess to not understanding how excessive line numbers would be removed from the original file. Like if it had 30 lines and a limit was 10, I can see how the array would have the desired ten lines. But, I don't see how the 30 line file wouldn't end up having 40, with the array's "contribution" preceding what is already there.

    I'll test it out.

    Thanks again...

    o2

      You're correct, the code as shown will append. That's easy enough to correct though. Replace the >> with a single > in your open of the output file.