sub QueryToHash { my $query = shift ; # der string mit der Query my %resulthash; my @parameter_arr = split /\&/, $query ; foreach my $parameter (@parameter_arr) { my $iref = \%resulthash; my ( $p_name, $p_value ) = split /=/, $parameter ; my @komponenten = split /_/, $p_name ; # zerlege name in komponenten while( my $komponente = shift @komponenten ) { if( $komponente =~ /(\d{1,6})/ ) # komponente ist dezimal { # ??????????????????????????? $komponente = scalar $komponente; # $iref->[ $komponente ] = [] unless $iref->[ $komponente ]; # $iref = $iref->[ $komponente ]; } else { unless( $iref->{$komponente} ) { unless( scalar @komponenten ) { $iref->{$komponente} = $p_value ; #next; } else { $iref->{$komponente} = {} ; } } $iref = $iref->{$komponente}; } } } return \%resulthash; } print Dumper( QueryToHash('nur_ein_test_mit_zahl_123=456&nur_ein_test_ohne_zahl=789') );