This version works. :)
my @simpsons=("homer","bart","marge","maggie","lisa");
my @females=("lisa","marge","maggie","maude");
my %simpsons=map{$_ =>1} @simpsons;
my %females=map{$_=>1} @females;
# the intersection of @females and @simpsons:
my @female_simpsons = grep( $simpsons{$_}, @females );
# proof it works
print "Female Simpson:\t$_\n" foreach (@female_simpsons);
# the difference of @females and @simpsons
my @male_simpsons=grep(!defined $females{$_}, @simpsons);
# proof it works
print "Male Simpson:\t$_\n" foreach (@male_simpsons);
my %union = ();
# the union of @females and @simpsons
foreach(@females,@simpsons){
$union{$_}=1;
}
my @union2 = keys %union;
# or just do this
# my @union = (@females, @simpsons);