in reply to a regex question

I totally agree with kvale (++) -- highest preference to using Text::xSV on this problem. And just in case you'd like to look at an alternative approach (just as an educational exercise), consider this:
$_ = 'Jul 15 15:12:10 a=foo time="2004-07-14 01:20:25 UTC" b=abc@foo.c +om msg="^one can say anything here except quotes$"'; my ($timestamp,%pairs) = split(/\s+(\w+)=/); print "Timestamp => $timestamp\n"; print "$_ => $pairs{$_}\n" for (sort keys %pairs); __OUTPUT__ Timestamp => Jul 15 15:12:10 a => foo b => abc@foo.com msg => "^one can say anything here except quotes$" time => "2004-07-14 01:20:25 UTC"
The magic is in using split with a capturing regex, which will divide up the string into its component values, while keeping (and passing along) the attribute titles as well.