Then the solution above may be simplified to:
#!/usr/bin/perl -l
use strict;
use warnings;
my @file1=qw/foo bar baz/;
my @file2=qw/fred bar barney/;
my %saw;
$saw{$_}++ for @file1, @file2;
print <<"EOT"
\@file1 only: (@{[ grep $saw{$_}==1, @file1 ]})
\@file2 only: (@{[ grep $saw{$_}==1, @file2 ]})
common: (@{[ grep $saw{$_}==2, @file2 ]})
EOT
__END__
or even, using modulo-2 math, but more obscurely:
#!/usr/bin/perl -l
use strict;
use warnings;
my @file1=qw/foo bar baz/;
my @file2=qw/fred bar barney/;
my %saw;
$saw{$_} ^= 1 for @file1, @file2;
print <<"EOT"
\@file1 only: (@{[ grep $saw{$_}, @file1 ]})
\@file2 only: (@{[ grep $saw{$_}, @file2 ]})
common: (@{[ grep !$saw{$_}, @file2 ]})
EOT
__END__
|