For fun, here's a version that uses a linked list. The "defined" ensures that there is something to be printed. If you change $lookback to 4 and rerun, you'll see it in action.
#!/usr/bin/env perl use strict; use warnings; my $lookback = 3; my $match = qr/\wiz/; my @lbuff = map { [] } 1..$lookback; $lbuff[$_-1][0] = $lbuff[($_) % $lookback] for 1..$lookback; my $curr = $lbuff[0]; while (<DATA>) { /$match/ and defined $$curr[1] and print "$$curr[1]"; ($$curr[1], $curr) = ($_, $$curr[0]); } __DATA__ foo bar baz biz buz goo car caz ciz cuz
P.S. If anyone knows how to reduce the two-line circular linked list definition into one line of idiomatic perl I would love to see it. I'm too tired to think of something clever at the moment.
In reply to Re: Printing line before matching expression
by jaredor
in thread Printing line before matching expression
by rm
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |