blah.hat=splat cat=doh,ray #### ... my $Config = { some => 'default values', }; while () { chomp; my ($key, $value) = split /=/,2; my @path = split /\./, $key; my $loc = $Config; my $last = pop @path; for (@path) { $loc->{$_} ||= {}; $loc = $loc->{$_}; }; if ($value =~ /,/) { # Store an array $loc->{$last} = [ split /,/, $value ]; } else { $loc->{$last} = $value; }; };