my $string = "sometrash key1=value0 value1, value2 key2=value3 key3=value4"; $string .= " dummy="; # add a dummy value for the regex to work while ($string =~ m/\s+([^\s]+?)=(.*?)(?=\s[^\s]+=)/g) { $data{$1} = $2; }