配列の差分を取る
たとえば、
my @array_a = (1,2,3,4,5); my @array_b = (3,4,5,6,7);
とあって、array_aには有るけどarray_bには無い要素だけを取り出したい、というケース。正式には、集合array_aから集合array_bを引いた差集合、とかいう言い方になりますかね。 これを求めるには、以下のようにするとできます。
my @array_c = grep { my $t=$_; ! grep /^$t$/,@array_b; } @array_a;
こうすると、
$ cat tmp.pl #!/usr/bin/perl use strict; use warnings; my @array_a = (1,2,3,4,5); my @array_b = (3,4,5,6,7); my @array_c = grep { my $t=$_; ! grep /^$t$/,@array_b; } @array_a; print "@array_c\n"; $ perl tmp.pl 1 2
とこんな感じで差分を取ることができます。
同じ理屈で、
my @array_c = grep { my $t=$_; ! grep /^$t$/,@array_b; } @array_a;
こうすれば、両方の配列で重複している要素を取り出すことができます。