Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, I am trying to create a Hash or array of hashes for the following condition
1 | p1=v1,p2=v2 | p3=v3,p4=v4
My hash of array of hashes should be some thing like this
%hash = ( 1 => [ {p1 => v1, p2 => v2}, {p3 => v3, p4 => v4} ] );
I have written the following code. It seems to be not working, can any one suggest what is wrong in this snippet
my @conditioin = split(/\|/); %{$mapping_rule{$condition[0]}}->[0]} = map {split (/=/, $_)} = map {s +plit (/\,/, $condition[1])}; %{$mapping_rule{$condition[0]}}->[1]} = map {split (/=/, $_)} = map {s +plit (/\,/, $condition[2])}; foreach my $rule (keys %mapping_rule) { print "rule is $rule\n"; foreach my $cond (@{$mapping_rule{$rule}}) { foreach my $param (keys %{$mapping_rule{$rule}->{$cond}}) { print "Parameter is $param and value is ${$mapping_rule{$r +ule}->{$cond}->{$param}}\n"; } } }

Replies are listed 'Best First'.
Re: Hash of array of hashes
by monarch (Priest) on Jul 08, 2005 at 06:38 UTC
    Solved!

    Produces:

    $VAR1 = { '1' => [ { 'p2' => 'v2', 'p1' => 'v1' }, { 'p3' => 'v3', 'p4' => 'v4' } ] };
      Thanks, that was really fast and really good.
Re: Hash of array of hashes
by sh1tn (Priest) on Jul 08, 2005 at 06:28 UTC
    ... foreach my $cond (@{$mapping_rule{$rule}}) { foreach my $param (keys %{$cond}) { ...


Re: Hash of array of hashes
by ww (Archbishop) on Jul 08, 2005 at 14:06 UTC

    You may wish to note that $condition[0] does not relate to any element of @conditioin ...which is just one of the examples in your original post that show why using strict and warn is such good practice.
    the (relevant) others are:

    Unmatched right curly bracket at mapping.pl line 7, at end of line syntax error at mapping.pl line 7, near "]}"

    Perhaps these are merely typos created while posting your question; if so, another recommendation: cut and paste code, rather than risk introducing irrelevant typos (or, as has occasionally occured, fixing a problem by eliminating a typo).