Sounds like set arithmetic to me.. I would recommend Set::Scalar
I threw this together as an example. Course order is wacked when you use sets...
use strict;
use Set::Scalar;
my $a = [1,2,3,4,5,6];
my $b = [3,4,5,7,8];
my $c = [3,6,8,9];
my $sa = Set::Scalar->new(@$a);
my $sb = Set::Scalar->new(@$b);
my $sc = Set::Scalar->new(@$c);
my $x = 3;
my $mina = $sa - $sb - $sc + ($sa * $x);
my $minb = $sb - $sa + ($sb * $x);
my $minc = $sc - $sb + ($sc * $x);
print("Minimum Set A:" . join(',', $mina->members) . "\n");
print("Minimum Set B:" . join(',', $minb->members) . "\n");
print("Minimum Set C:" . join(',', $minc->members) . "\n");
__END__
Minimum Set A:1,3,2
Minimum Set B:8,3,7
Minimum Set C:6,3,9
"Look, Shiny Things!" is not a better business strategy than compatibility and reuse.
OSUnderdog