#### sub nest_hash { my ($delim, $hash) = @_; my $new; while (my ($key, $value) = each %$hash) { unless ($key =~ /\Q$delim\E/s) { $new->{$key} = $value; next; } my ($before, $after) = ($`, $'); my $temp = nest_hash($delim, { $after => $value }); while (my ($k, $v) = each %$temp) { $new->{$before}{$k} = $v; } } return $new; } my $params = $q->param(); my $nested = nest_hash('.', $params); my $hashref = $nested->{form_item}; print $nested->{form_item}{foo}; # one print $hashref->{fiddle}; # three