#! /usr/bin/perl5.8.8 use strict; use warnings; use diagnostics; use Data::Dumper; 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 = $iref->[ $komponente ]; # ??? } else { $iref = $iref->{ $komponente }; # ??? } } $iref = $p_value; # ??? } return \%resulthash; } print Dumper( QueryToHash('test_hallo=nix&nur_ein_test_mit_zahl_123=456') ); 1;