my $flag = 0; # TRUE when in a sub header or sub-sub header my @rry = ; for my $rry(@rry) { if ( $rry =~ /\A={3,4}sub.*?={3,4}$/ ) { $flag = 1; print $rry . "\n"; next; } if ( $rry =~ /\A[^=].*/ && $flag == 1 ) { print $rry . "\n"; } else { $flag=0; next; } } #### ===sub header=== [[testing]] ====sub-sub header==== bla bla ===sub header=== [[testing]] sub-sub header bla bla