in reply to Re: how to use the values of the first hash to be the keys for the second hash
in thread how to use the values of the first hash to be the keys for the second hash

Thank you so much.

Just I don't know how to print the result as the normal tab delimited table. Sorry for these newbie's questions.Really appreciate your help.

  • Comment on Re^2: how to use the values of the first hash to be the keys for the second hash

Replies are listed 'Best First'.
Re^3: how to use the values of the first hash to be the keys for the second hash
by choroba (Cardinal) on Sep 07, 2012 at 18:24 UTC
    You can use each to iterate over the hash:
    #!/usr/bin/perl use warnings; use strict; my %hash1 = (key1 => [qw(val1 val2)], key2 => ['val3'], ); my %hash2 = (val1 => [qw(val5 val6 val7)], val2 => [qw(val8 val9)], val3 => ['val3'], ); my %result = (map { $_ => [ map @{ $hash2{$_} } , @{ $hash1{$_} } ] } keys %hash1); while (my ($k, $v) = each %result) { print $k, " @$v\n"; }
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      This is so great.

      But the values in my hash1 are not arrays, they are strings with each key for hash2 separated by comma ",". How should I turn the strings in to array so that I could adapt to the code?

      Thanks again, great help!

        Ah, ok, that was originally not clear from the question. You can use split to get the list from the string:
        #!/usr/bin/perl use warnings; use strict; my %hash1 = (key1 => 'val1,val2', key2 => 'val3', ); my %hash2 = (val1 => 'val5,val6,val7', val2 => 'val8,val9', val3 => 'val3', ); my %result = map { $_ => join ',', map split(/,/, $hash2{$_}), split /,/, $hash1{$_} } keys %hash1; while (my ($k, $v) = each %result) { print "$k: $v\n"; }
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
Re^3: how to use the values of the first hash to be the keys for the second hash
by lrl1997 (Novice) on Sep 07, 2012 at 18:12 UTC
    and, since value's of my hash tables are separated by ",", how can I do map by splitting values in hash1 by ","?