in reply to read lines... wait, back up?

you need to explicitly save the lines you'll want. you'll probably not need to save more than a few, so this is not really a big deal. define a list, and keep them as you go:

sub process { print 'foo'; }
my @oldlines = ();
my $LINES_TO_KEEP = 10;
while(<>) {
    # drop the entry on the bottom, and add $_ to the top
    unshift @oldlines;
    scalar(@oldlines)>$LINES_TO_KEEP && pop @oldlines;

    # do your processing here. call process first unless you
    # want @oldlines to hold the unmodified version of the
    # line
    process($_);
}