use strict; use warnings; use Data::Dumper; my %h; while () { while (m/(\w+)\s?:\s?(\S*)/g){ $h{$1} = $2; } } print Dumper \%h; __DATA__ firstName : firstValue Name2: Value2 Name3:Value3 Name4:value4 Name5: Name6: