#! /usr/bin/perl use strict ; use warnings ; use Tie::File ; my $filename = shift @ARGV ; tie my @lines, 'Tie::File', $filename or die "Can't open file: $!" ; for ( 0 .. $#lines ) { if ( $lines[$_] =~ /du/ ) { print map { $_ . $/ } @lines[$_-2..$_] ; } }