Zcity has asked for the wisdom of the Perl Monks concerning the following question:

Hi,
Is there a way perl can read a file from the bottom up. I have a guest webforum and I want the latest post to show up on top. Any suggestions?

Replies are listed 'Best First'.
Re: Read file from bottom up
by bobf (Monsignor) on Jul 07, 2006 at 02:48 UTC

    CPAN is your friend: File::ReadBackwards

    If you're displaying whole records rather than single lines, you'll have to add a little of your own magic so the records are reversed but the lines within them are not.

Re: Read file from bottom up
by starbolin (Hermit) on Jul 07, 2006 at 06:26 UTC
Re: Read file from bottom up
by radiantmatrix (Parson) on Jul 07, 2006 at 17:56 UTC

    My suggestion is not to do it that way. If you have control over the software that creates the post, then I suggest you port it to use a database (even if it's just the file-based DBD::SQLite2). If you include an auto-incrementing ID field (and you should anyhow), then the solution is simple:

    $sth = $dbh->prepare('SELECT Author, DateTime, Message, ID FROM forum_ +posts ORDER BY ID DESC'); $sth->execute(); my $records = $sth->fetchall_arrayref( undef, 50 ); #only get 50 posts for (@$records) { RenderMessage($_) }

    Of course, if you don't have control of that forum software, then you'd have to write something to read the file that's created and insert the messages into the database, first. In that case, one of the other solutions (like the File::ReadBackwards one) might be more useful.

    Still, there's no good reason not to use a database for this application, so maybe upgrading is a good idea... </code>

    <radiant.matrix>
    A collection of thoughts and links from the minds of geeks
    The Code that can be seen is not the true Code
    I haven't found a problem yet that can't be solved by a well-placed trebuchet
      Thanks everyone for your posts. It seems all suggestions are good. I will give it a try and let you know. Thanks.
        Thanks everyone. I used

        my @logmessages = reverse <FH>;
Re: Read file from bottom up
by Herkum (Parson) on Jul 07, 2006 at 11:51 UTC
    How about this?
    open my $fh, '<', 'Somefile.txt'; my @file = <$fh>; close $fh; foreach my $line (reverse @file) { # Starts from the bottom of the list # instead of the top }