#!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; Main( @ARGV ); exit( 0 ); sub Main { my $str = q[sometrash key1=value0 value1, value2 key2=value3 key3=value4]; my @tokens = split /([^\s=]+=)/, $str; shift @tokens until $tokens[0] =~ /=$/; print Dumper( { @tokens } ); } __END__ $VAR1 = { 'key3=' => 'value4', 'key2=' => 'value3 ', 'key1=' => 'value0 value1, value2 ' };