Though we have arrived at very similar solutions, I think
yours fails to pick up multiple values for the last key:
use strict;
use warnings;
use Data::Dumper;
my $data="key1=value1 key2=value2 value3 key3=value4 value5 value6 key
+4=value7 key5=value8 key6=value9 value10";
# Albannach version
my %hash;
while ($data =~ /(\w+=)((\w+( |$)+)+)/g) {
$hash{$1} = $2;
}
print Dumper \%hash;
# gumpu version:
my %foo;
while ($data =~ m/(\S+)=(\S+($|([^=]+\s+)+))/g) {
$foo{$1}=$2;
}
print Dumper \%foo;
Produces:
$VAR1 = {
'key4=' => 'value7 ',
'key5=' => 'value8 ',
'key1=' => 'value1 ',
'key6=' => 'value9 value10',
'key2=' => 'value2 value3 ',
'key3=' => 'value4 value5 value6 '
};
$VAR1 = {
'key1' => 'value1 ',
'key2' => 'value2 value3 ',
'key3' => 'value4 value5 value6 ',
'key4' => 'value7 ',
'key5' => 'value8 ',
'key6' => 'value9 '
};
Update: The = in the key? You are right of course - silly me! Thanks gumpu!
--
I'd like to be able to assign to an luser |