Thread Unbestimmt tiefen HashinHash erzeugen
(14 answers)
Opened by scriptor at 2009-08-09 00:58
Hier nochmal das Beispiel nach den Hinweisen von pq und LanX korrigiert. Wenn die letzte Komponente erreicht ist, wird nun der Wert gesetzt. Funktioniert soweit.
Nicht funktioniert dagegen das Einbauen der Arrays ab Zeile 13. In der Regel wird der $iref auf einen Hash referenzieren, wie kann ich dann eine Liste zuweisen??? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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') ); Code: (dl
)
1 $iref = { Gewünscht wäre: Code: (dl
)
1 $iref = { Last edited: 2009-08-09 14:01:34 +0200 (CEST) |