[perl] 配列の和・積・差

配列をマージしたり差分をとったりしたいとよく思うのでメモ。
ハッシュ便利だなあ。

和集合 A∪B

my @array_a = qw/1 2 3 4 5/;
my @array_b = qw/3 4 5 6 7/;

my %cnt = ();
my @array = grep { ++$cnt{$_} == 1 } (@array_a, @array_b);

積集合 A∩B

my @array_a = qw/1 2 3 4 5/;
my @array_b = qw/3 4 5 6 7/;

my %cnt = ();
my @array = grep { ++$cnt{$_} == 2 } (@array_a, @array_b);

差集合 A-B

my @array_a = qw/1 2 3 4 5/;
my @array_b = qw/3 4 5 6 7/;

my %cnt = ();
map { $cnt{$_}-- } @array_b;
my @array = grep { ++$cnt{$_} == 1 } @array_a;