In order to use sets easily in Perl we first need to install the Set::Scalar module from CPAN. You would usually use
cpanm Set::Scalar
to do this.
There are many additional ways to use the module, but let me show some of the basic examples using two sets, a few words in English and a few words in Spanish.
Method calls
We can use method calls to do operations:
use strict;
use warnings;
use 5.010;
use Set::Scalar;
my $english = Set::Scalar->new('door', 'car', 'lunar', 'era');
my $spanish = Set::Scalar->new('era', 'lunar', 'hola');
say $english; # (car door era lunar)
say $spanish; # (era hola lunar)
my $in_both = $english->intersection($spanish);
say $in_both; # (era lunar)
my $in_both_other_way = $spanish->intersection($english);
say $in_both_other_way; # (era lunar)
my $in_either = $english->union($spanish);
say $in_either; # (car door era hola lunar)
my $english_only = $english->difference($spanish);
say $english_only; # (car door)
my $spanish_only = $spanish->difference($english);
say $spanish_only; # (hola)
my $ears_of_the_elephant = $english->symmetric_difference($spanish);
say $ears_of_the_elephant; # (car door hola)
Operator overloading
We can also use overloaded operators:
use strict;
use warnings;
use 5.010;
use Set::Scalar;
my $english = Set::Scalar->new('door', 'car', 'lunar', 'era');
my $spanish = Set::Scalar->new('era', 'lunar', 'hola');
say $english; # (car door era lunar)
say $spanish; # (era hola lunar)
my $in_both = $english * $spanish;
say $in_both; # (era lunar)
my $in_both_other_way = $spanish * $english;
say $in_both_other_way; # (era lunar)
my $in_either = $english + $spanish;
say $in_either; # (car door era hola lunar)
my $english_only = $english - $spanish;
say $english_only; # (car door)
my $spanish_only = $spanish - $english;
say $spanish_only; # (hola)
my $ears_of_the_elephant = $english % $spanish;
say $ears_of_the_elephant; # (car door hola)
Sets and Venn diagrams
Check out the Venn diagrams on Wikipedia if you'd like to refresh your memory or if you need to learn about sets.