my $B = 5;
my $A = 3;
my $re = qr/somepat/;
my $skip = 0;
my @lines;
while (<>) {
if (/$re/) {
@lines = ();
$skip = $A;
}
elsif ($skip) {
--$skip;
}
else {
push @lines, $_;
print(shift(@lines)) if @lines > $B;
}
}
print for @lines;
####
keep 1
discard B5
discard B4
discard B3
discard B2
discard B1
somepat
discard A1
discard A2
discard A3
keep 2
keep 3
discard B5
discard B4
discard B3
discard B2
discard B1
somepat
discard A1
somepat
discard A1
discard A2
discard A3
keep 4
discard B5
discard B4
discard B3
discard B2
discard B1
somepat
discard A1
discard A2
discard A3
discard B1
somepat
discard A1
discard A2
discard A3
keep 5
####
keep 1
keep 2
keep 3
keep 4
keep 5