Thread Unbestimmt tiefen HashinHash erzeugen
(14 answers)
Opened by scriptor at 2009-08-09 00:58
Hm.. dein Code wirft einige Fragen auf:
* Hast du ein Beispiel für einen 'Type dismatch', ich verstehe nicht so recht, wie es dazu kommen kann. * Wenn man an deinen Beispielstring ein '&nur_ein_test=10' anhängt, wird die Struktur zerstört. Hier ist der Fragesteller gefragt: Soll dies erlaubt sein? Wenn es denn wirklich sein muss, würde ich es so machen: 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 40 41 42 43 44 45 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $q = 'ein_test_mit_zahl_123=456&ein_test_ohne_zahl=789'; # dies würde einen fehler erzeugen: #$q .= '&ein_test=10'; print Dumper(resolve($q)), "\n"; sub resolve { my( $query ) = @_; my $res = my $tmp = undef; for ( split /\&/, $query ) { my( $path, $val ) = split /\=/; for ( split /\_/, $path ) { if ( /^\d+$/ ) { $$res = [] if ! defined $res; $tmp = $res if ! defined $tmp; $res = \$$res->[$_]; } # if else { $$res = {} if ! defined $res; $tmp = $res if ! defined $tmp; $res = \$$res->{$_}; } # else } # for if ( ref $$res ) { die "Incorrect query!\n'$path' points to a location that already holds data.\n"; } # if else { $$res = $val; } # else $res = $tmp; } #for return $$res; } # resolve MfG perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
|