$parts{ $1 } = $2 while $m =~ m[ (?: \A | \n ) ( [^:]+ ) \s* : (.*?) (?= (?: \n \S [^:]* : ) | \Z ) ]gxs; #### # You have 'Remarks' => ' DIRECTIONAL BORING=NO. DEPTH EXCEEDS 7 FEET=NO. : TICKET EXPIRES AFTER 04/22/04', 'Dig No ' => ' A081 Prior: 2 Digstrt: 03/30/04 Time: 10:45' # # I want 'Remarks' => ' DIRECTIONAL BORING=NO. DEPTH EXCEEDS 7 FEET=NO. TICKET EXPIRES AFTER 04/22/04', 'Dig No ' => ' A081', 'Prior' => 2, 'Digstrt' => '03/30/04', 'Time' => '10:45'