use Modern::Perl; use Data::Dump qw/dump/; my %heights; while () { push @{$heights{$1}}, $3 if /set\s+height\s+"([^"]+)"\s*("([^"]+)")?/; } say dump(%heights); __DATA__ set height "house" set height "house" "5 meter" set height "house" "10 yards" set height "table" "80 cm" set height "table" "30 inch"