use Text::xSV; use Set::Object; my $parser = Text::xSV->new; my @keys = split ',', shift(@ARGV); my @sets; foreach my $filename (@ARGV) { $parser->open_file( $filename ); push @sets, Set::Object->new; $parser->read_header; while ($parser->get_row) { my $key = join ',', $parser->extract( @keys ); $sets[-1]->insert( $key ); } } # At this point, you have all the keys in @sets. You can: # $union = $sets[0] + $sets[1]; # $intersection = $sets[0] * $sets[1]; # $difference = $sets[0] - $sets[1]; # $symmetric_difference = $sets[0] % $sets[1];