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

Jeez! People do love to change the question to suit their answer. Try this:

#! perl -slw use strict; use Data::Dump qw[ pp ]; my %hash1 = ( 'key1', 'val1,val2', 'key2', 'val3' ); my %hash2=( 'val1','val5,val6,val7', 'val2','val8,val9', 'val3','val3' ); my %newhash = map { $_ => join ',', @hash2{ split ',', $hash1{ $_ } }; } keys %hash1; pp \%newhash; __END__ C:\test>junk { key1 => "val5,val6,val7,val8,val9", key2 => "val3" }

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

RIP Neil Armstrong

p
  • Comment on Re: how to use the values of the first hash to be the keys for the second hash
  • Download Code

Replies are listed 'Best First'.
Re^2: 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 23:14 UTC
    People do love to change the question to suit their answer.
    That was the author who changed the OP. Before the change, the structure of the hashes was not clear at all.
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      choroba was right that my original question was not clear. Thank you both for helping me on this, I really appreciate your help indeed. here is the code based on what I learned from here:

      my $hash1=shift; open (my $fh1, "<",$hash1) or die "$!"; my %h1=(); while (<$fh1>) { chomp; my ($k1,$v1)=split /\t/; $h1{$k1}=$v1; } my $hash2=shift; open (my $fh2, "<",$hash2) or die "$!"; my %h2=(); while (<$fh2>) { chomp; my ($k2,$v2)=split /\t/; $h2{$k2}=$v2; } my %combined_hash = map { $_ => join ',', map split(/,/, $h2{$_}), split /,/, $h1{$_} } keys %h1; while (my ($k, $v) = each %combined_hash) { print "$k\t$v\n"; }
Re^2: 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 21:46 UTC

    thank you so much.

    when I tried to print the %newhash:

    #!/usr/bin/perl use warnings; use strict; use Data::Dump qw[ pp ]; #subroutine: read in hash tables my $hash1=shift; open (my $fh1, "<",$hash1) or die "$!"; my %h1=(); while (<$fh1>) { chomp; my ($k1,$v1)=split /\t/; $h1{$k1}=$v1; } my $hash2=shift; open (my $fh2, "<",$hash2) or die "$!"; my %h2=(); while (<$fh2>) { chomp; my ($k2,$v2)=split /\t/; $h2{$k2}=$v2; } my %newhash = map { $_ => join ',', @h2{ split ',', $h1{ $_ } }; } keys %h1; while (my ($k, $v) = each %newhash) { print $k, "\t@{$newhash{$k}}\n"; }

    it says "Can't use string ("val3") as an ARRAY ref while "strict refs" in use at line 34, <$fh2> line 3.'"

    could you explain to me why?,/p>

      Have you tried dumping the two input hashes after you've populated them?


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      RIP Neil Armstrong

        may sounds stupid, but I don't really understand how to "dumping the two input hashes after populated them"