my $pattern = qr/match this string!/; my $n = 4; my @li; while(<>) { if ( @li && $. == $li[0] ) { print; shift @li; } /$pattern/ and push @li, $. + $n; }