my %seen; ++$seen{$_} while <$fh_in1>; --$seen{$_} while <$fh_in2>; for (keys(%seen)) { print($fh_out1 $_) if $seen{$_} > 0; print($fh_out2 $_) if $seen{$_} < 0; } #### my %seen1; ++$seen1{$_} while <$fh_in1>; my %seen2; ++$seen2{$_} while <$fh_in2>; print $fh_out1 grep !$seen2{$_}, keys %seen1; print $fh_out2 grep !$seen1{$_}, keys %seen2;