die "cannot open ${infile1}: $!\n" unless open $IN1, '<', $infile1; die "cannot open ${infile2}: $!\n" unless open $IN2, '<', $infile2; die "cannot open ${outfile}: $!\n" unless open $OUT, '>', $outfile; my (@UR_CI) = <$IN1>; my (@CI_UR) = <$IN2>; my ( %UR_CI, %CI_UR ); foreach my $seq (@UR_CI) { if ( $seq =~ /^(\w+)\s+(\w+)$/ ) { $UR_CI{"$1"} = "$2"; } } foreach my $seq (@CI_UR) { if ( $seq =~ /^(\w+)\s+(\w+)$/ ) { $CI_UR{"$2"} = "$1"; } } foreach my $key1 ( keys %UR_CI ) { foreach my $key2 ( keys %CI_UR ) { foreach my $value1 ( values %UR_CI ) { foreach my $value2 ( values %CI_UR ) { if ( $UR_CI{$key1} eq $CI_UR{$key2} and $UR_CI{$value1} ne $CI_UR{$value2} ) { delete $UR_CI{$key1}; } } } } } while ( my ( $key, $value ) = each %UR_CI ) { print $OUT "$key => $value\n"; }