my @something; { my $before = []; my $after = []; my $curr = $before; my $meta = []; LOOP: while (<$fh>) { if (/^\Q..../) { $curr = $after; next LOOP; } if (/^ $meta, before => $before, after => $after, }; $before = []; $after = []; $curr = $before; $meta = [$_]; next LOOP; } ## end if (/^) if ( grep { $_ or @$_ } $meta, $before, $after ) { push @something, { meta => $meta, before => $before, after => $after, }; } ## end if ( grep { $_ or @$_ ...}) }