use strict; use warnings; my @unv; my $pos; while (){push @unv,$.-1,$.,$.+1 if /XXXXX/;$pos=(tell DATA)-length $_ unless $pos} seek DATA,$pos,0; $.=0; while () {print unless $. ~~ @unv}