~/$ perl -e ' $string="sometrash key1=value0 value1, value2 key2=value3 key3=value4"; %hash = $string =~/ (\w+) #capture the key name = # separated from the value by an equals (.+?) # and then the value, non-greediness prevents running into the subsequent values (?=(?:\s\w+=|$)) # finally we look ahead to ensure that what follows is a space and a "key=" pattern, or else the end end of the string /xg; #Match globally and allow comments in the regex for maintainability # And check use Data::Dumper;print Dumper(\%hash); ' $VAR1 = { 'key2' => 'value3', 'key1' => 'value0 value1, value2', 'key3' => 'value4' };