use Data::Dumper; LINE: while (defined($_ = )) { $item = $1 if /^=item (.*)/; push @{$warnings{$1};}, $item if /\(W ([^)]*)\)/; sub END { print Dumper(\%warnings); } ; }