my $data = join '', ; my $matrix = {}; while($data =~ /"(\d+) \s+ \( (\w+)v(\w+) \)" /gx) { $matrix->{$2}->{$3} = $1; } for my $x (keys %$matrix) { for my $y (keys %{$matrix->{$x}}) { print "$x / $y => $matrix->{$x}->{$y}\n"; } } __DATA__ "S (00exp)", "2/16/105", "19:59:6", "131.111.249.177", "18 (04Age)", "M (05sex)", "british (07Cn)", " (17Com)", "8 (SvAA)", "9 (SvAE)", "10 (SvAH)", "10 (SvAO)", "9 (SvAW)", "10 (SvAY)", "5 (SvB)", "3 (SvCH)", "4 (SvD)", "2 (SvDH)", "9 (SvEH)", "9 (SvER)", "8 (SvEY)", "2 (SvF)", "8 (SvG)", " (SvHH)", "2 (SvIH)", "9 (SvIY)", "3 (SvJH)", "5 (SvK)", "8 (SvL)", "7 (SvM)", "8 (SvN)", "9 (SvNG)", "10 (SvOW)", "9 (SvOY)", "4 (SvP)", "8 (SvR)", "2 (SvSH)", "8 (SvT)", "2 (SvTH)", "10 (SvUH)", "9 (SvUW)", "6 (SvV)", "7 (SvW)", "9 (SvY)", "4 (SvZ)", "6 (SvZH)", "complete"