my $string = 'to=, relay=monet1.ngv.vic.gov.au[10.10.10.20]:25, delay=0.54, delays=0.06/0.02/0/0.46, dsn=2.0.0, status=sent '; $LogLineHash = qr { ^ ([^=]*)=?,?\s+) (.*?) $ }xi; while ( $string ){ print "String: $string\n"; ( $junk , $key , $value, $string ) = split( /$LogLineHash/ , $string ); print "Key: $key\nValue: $value\nLeft Over: $string\n\n"; $Hash{$key}=$value; } while ( my ($key, $value) = each(%Hash) ) { print "$key => $value\n"; }