in reply to Managing multiple keys in a hash table...

I also found this quite difficult to understand. I assumed your lists were arrays and that your keys were stored in hashes. Following those assumptions i producted this:
my @list1 = qw/a b c d e f g/; my @list2 = qw/a b c d e /; my %one = ( a => 1, b => 1, c => 1 ); my %two = ( f => 1, g => 1 ); for my $key ( keys %one ) { if ( grep {$_ eq $key} @list1 and grep {$_ eq $key} @list2) { print +"File 1 $key", $/ } } for my $key ( keys %two ) { unless ( grep {$_ eq $key} @list1 and grep {$_ eq $key} @list2 ) { if ( grep {$_ eq $key} @list1 or grep {$_ eq $key} @list2 ) { print "File 2 $key", $/; } } }
This will work for: "If key1 is matched between list1 and list2 write to a file. Then, after the key1 match is made, check if key2 is NOT matched between list1 and list2 then write to another file" Although it is hard to follow what exactly you have set up, or i could provide a more thorough answer. Hope this helps a little bit!

Replies are listed 'Best First'.
Re^2: Managing multiple keys in a hash table...
by ikegami (Patriarch) on Jun 02, 2005 at 18:02 UTC

    If don't know if your solution does the right thing or not, but I do know it can be optimized. What follows does exactly the same thing as yours, except it does it in O(n) time instead of O(n*n)

    my @list1 = qw/a b c d e f g/; my @list2 = qw/a b c d e /; my %one = ( a => 1, b => 1, c => 1 ); my %two = ( f => 1, g => 1 ); my %list1; undef @list1{@list1}; my %list2; undef @list2{@list2}; foreach my $key (keys %one) { if (exists $list1{$key} && exists $list2{$key}) { print "File 1 $key", $/; } } foreach my $key (keys %two) { unless (exists $list1{$key} && exists $list2{$key}) { if (exists $list1{$key} || exists $list2{$key}) { print "File 2 $key", $/; } } }