use strict; my $in_section = 0; foreach (<>) { $in_section=1, next if m{if\s+\(some\s+condition2\s+=\s+0\)}; $in_section=0, next if m{^\s*end\s+if;}; # next could be omitted...here print if $in_section; } __END__ read this data 3; read data 4; read this data 6;