in reply to Is it possible to insert a record after line 5 that appears on line 10?

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;

Or a version that doesn't start buffering before it needs to:

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

Both handle all of these according to the given specs:

:16R:SECMOVE :17B: :35B: :16R:SECMOVE :17B: :35B: :35B: :16R:SECMOVE :35B: :17B: :35B: :17B: :16R:SECMOVE :35B:

Untested.

Update: Simplified.