my $context = 4; my @buffer = ('') x $context; my $print_to = 0; my $match = qr/42/; while() { if ( m/$match/ ) { print @buffer; $print_to = $. + $context; @buffer = ('') x $context; } push @buffer,$_; shift @buffer; print if $. <= $print_to; }