my $seen_16r_secmove = 0; my $seen_17b = 0; my @buf; while (<>) { if (/^:17B:/) { $seen_17b = 1; print @buf; @buf = $_; } elsif ($seen_16r_secmove && $seen_17b && /^:35B:/) { print; } else { $seen_16r_secmove = 1 if /^:16R:SECMOVE$/; push @buf, $_; } } print @buf;