use strict; use Tie::IxHash; my %login; { tie( my %csv, 'Tie::IxHash', 'one' => undef, 'two' => undef, 'three' => undef, 'four' => undef, 'five' => undef, ); $csv{one} = "11"; $csv{two} = "12"; $csv{three} = "13"; $csv{four} = "14"; $csv{five} = "15"; $login{1} = \%csv; } { tie( my %csv, 'Tie::IxHash', 'one' => undef, 'two' => undef, 'three' => undef, 'four' => undef, 'five' => undef, ); $csv{one} = "11"; $csv{three} = "23"; $csv{four} = "14"; $csv{five} = "25"; $login{2} = \%csv; } { tie( my %csv, 'Tie::IxHash', 'one' => undef, 'two' => undef, 'three' => undef, 'four' => undef, 'five' => undef, ); $csv{one} = "31"; $csv{two} = "12"; $csv{three} = "23"; $csv{five} = "25"; my $match = "2"; while (my ($k,$v) = each %login) { if ($k eq $match) { my %union; print "MATCH\n"; while ( my ($k, $v) = each %$v ) { $union{$k} = $v; } while ( my ($k, $v) = each %csv ) { $union{$k} = $v; } print map{$_ ."=". $union{$_} ."\n"} keys %union; } else { print "NO MATCH\n"; while ( my ($k, $v) = each %$v ) { print $k ."=". $v."\n"; } } } }