#!/usr/bin/perl # use strict; use warnings; use Data::Dumper; my %hash1; my %hash2; foreach my $line () { my ($key, $value) = split(/\s+/, $line); push(@{$hash1{$key}}, $value); push(@{$hash2{$value}}, $key); } print Dumper(\%hash1); print Dumper(\%hash2); print "Values for key a are @{$hash1{a}}\n"; print "Keys with value b are @{$hash2{b}}\n"; print "Keys with value h are @{$hash2{h}}\n"; __DATA__ key value a b a c a d e f g h g i j h #### $VAR1 = { 'e' => [ 'f' ], 'a' => [ 'b', 'c', 'd' ], 'g' => [ 'h', 'i' ], 'j' => [ 'h' ], 'key' => [ 'value' ] }; $VAR1 = { 'c' => [ 'a' ], 'h' => [ 'g', 'j' ], 'b' => [ 'a' ], 'value' => [ 'key' ], 'd' => [ 'a' ], 'f' => [ 'e' ], 'i' => [ 'g' ] }; Values for key a are b c d Keys with value b are a Keys with value h are g j