[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;