You don't say what to do if the match is found in the
first five lines of the file. I'm going to assume that this
can't happen. I'm also going to assume that you don't want
to read the whole file into memory at once.
I'd build a buffer that always contains the previous
five lines and work with that. Something like this:
#!/usr/bin/perl -w
use strict;
my @buffer;
push @buffer, scalar <DATA> for 1 .. 5;
my $pat = 8; # adjust to value to search for
while (<DATA>) {
print $buffer[0] if /$pat/;
push @buffer, $_;
shift @buffer;
}
__END__
1
2
3
4
5
6
7
8
9
10
--
<
http://www.dave.org.uk>
Perl Training in the UK <http://www.iterative-software.com>