#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $str = q{one="1" two="2" three="3" ... x="y" }; my @list; while ($str =~ m/(\w+)="([^"]+)"/g){ push @list, [$1, $2]; } print Dumper \@list; #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $str = q{one="1" two="2" three="3" ... x="y" }; our @list; $str =~ m{ (?> (\w+) # key = "([^"]+)" # value \W* # anything inbetween (?{ push @list, [$1, $2] }) )+ }xs or die "No match"; print Dumper \@list;