my %seen; #open DATA1 here ++$seen{$_} while (); #close DATA1 here #open DATA2 here while () { # Print any lines that are found, that weren't in DATA1 print((split)[0], "\n") unless (defined(delete $seen{$_})); } # print what's left print((split)[0], "\n") for (keys %seen);