##
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