On 7/7/05, wolverian <[EMAIL PROTECTED]> wrote:
> On Thu, Jul 07, 2005 at 08:18:40PM +0300, wolverian wrote:
> > I'm a pretty high level guy, so I don't know about the performance
> > implications of that. Maybe we want to keep seek() low level, anyway.
> 
> Sorry about replying to myself, but I want to ask a further question on
> this.
> 
> Would it be possible to make this work, efficiently:
> 
>     for =$fh[-10 ...] -> $line { ... }
> 
> to iterate over the last ten lines?

No.  Most notably because -10 ... gives (-10, -9, ... -1, 0, 1, 2, 3,
...).  I also don't think that without a special interface filehandles
can behave as an array of lines.  If they could, then you'd have:

    for $fh[-10..-1] -> $line {...}

> Can we generalise that to be as performance-effective as seek()?

Perhaps.  That's what tail(1) does.  But it's a tricky problem.  You
have to guess where the end should be, then do a binary search on the
number of lines after your position.  Sounds like a job for a
specialized module to me.

If you don't care about speed, then I suppose you could even do:

    for [ =$fh ].[-10..-1] -> $line {...}

Which won't be speed efficient, and may or may not be memory
efficient, depending on the implementation.  I'd guess not.

Luke

Reply via email to