sub QueryToHash { my $query = shift ; # der string mit der Query my $result; $result={}; for my $parameter (split(/\&/, $query)) { my ( $p_name, $p_value ) = split(/=/, $parameter,2); my $error=set_value($result,[split(/_/,$p_name)],$p_value); warn $error if($error); } return $result; } sub set_value { my $ref=shift; my $res=\$ref; my $query=shift; my $val=shift; my @path; for my $key ( @$query ) { push(@path,$key); if ( $key=~/^\d+$/ ) { if(ref($$res) && ref($$res) ne 'ARRAY') { return "Incorrect query! last key of '".join('_',@path)."' not same type as in tree\n"; } $res = \$$res->[$key]; } else { if(ref($$res) && ref($$res) ne 'HASH') { return "Incorrect query! last key of '".join('_',@path)."' not same type as in refernce\n"; } $res = \$$res->{$key}; } } if ( ref $$res ) { return "Incorrect query! '".join('_',@path)."' points to a location that already holds data.\n"; } else { $$res = $val; } return 0; }