Thread Unbestimmt tiefen HashinHash erzeugen (14 answers)
Opened by scriptor at 2009-08-09 00:58

scriptor
 2009-08-09 00:58
#123978 #123978
User since
2008-05-07
69 articles
BenutzerIn
[Homepage] [default_avatar]
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)

View full thread Unbestimmt tiefen HashinHash erzeugen