#!/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 () { /$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