It seems a bit of overhead to me if you use an array of the required buffer size to store the linked list and the data. What you save compared to other proposals is the pushing and shifting which involves a lot of copying data around. This can be done more easily by cycling through the buffer using the modulo operator on the line number of the data.
use strict; use warnings; my $lookback = 3; my $match = qr/\wiz/; my @lbuff; while (<DATA>) { /$match/ and defined $lbuff[ $. % $lookback ] and print "$lbuff[ $ +. % $lookback ]"; $lbuff[ $. % $lookback ] = $_; } __DATA__ foo bar baz biz buz goo car caz ciz cuz
In reply to Re^2: Printing line before matching expression
by hdb
in thread Printing line before matching expression
by rm
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |