Thread Unbestimmt tiefen HashinHash erzeugen
(14 answers)
Opened by scriptor at 2009-08-09 00:58
Ich wäre noch mal für Eure Hilfe dankbar:
Aus "nur_ein_test_mit_zahl_123=456" soll diese Hashstruktur entstehen: Code (perl): (dl
)
$resulthash{'nur'}{'ein'}{'test'}{'mit'}{'zahl'}[123]=456 Die Idee war $iref wie einen Pointer dieser Struktur nachzuführen, etwa so: $iref = $iref->{'nur'}; $iref = $iref->{'ein'}; $iref = $iref->{'test'}; $iref = $iref->{'mit'}; $iref = $iref->{'zahl'}; $iref = $iref->[123]; Das Beispiel ist auf das wesentliche reduziert und läuft natürlich so nicht. Die für mich fraglichen Stellen sind mit Fragezeichen versehen: 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 #! /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; Edit: Unsinn in Zeile 22 und 26 entfernt! Last edited: 2009-08-09 11:37:56 +0200 (CEST) |