in reply to Printing line before matching expression
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.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Printing line before matching expression
by hdb (Monsignor) on Sep 11, 2013 at 06:43 UTC | |
by Anonymous Monk on Sep 11, 2013 at 07:54 UTC | |
by hdb (Monsignor) on Sep 11, 2013 at 08:21 UTC | |
by jaredor (Priest) on Sep 11, 2013 at 18:56 UTC |