my $str = 'sometrash key1=value0 value1, value2 key2=value3 key3=value4'; my @tokens; for my $token (split(" ", $str)) { if ($token =~ m/=/) { push @tokens, $token; } else { next unless @tokens; $tokens[-1] .= ' ' . $token; } } my %tokens = map { split("=", $_) } @tokens;