k01ken’s b10g

He110 W0r1d!

Perlで2つの配列で重複する値 or しない値を抜き出す

開発環境はWindows 7 Professional(32bit)+Perl 5.24.0。

use strict;
use warnings;

my @arr1 = qw(30 20 60 100 90 10 40 80);
my @arr2 = qw(20 50 110 1200 40 100);

my %count;
my @unique;
$count{$_}++ for(@arr1,@arr2);

# (20,40,100) - 重複する値を抜き出す
@unique = grep{ $count{$_} >= 2 } keys %count;

# (30,60,90,10,80) - 重複しない値を抜き出す
@unique = grep{ $count{$_} < 2 } keys %count;

for文のこういう使い方は初めて見た。

■参考リンク
Perlで2つの配列の要素から重複を排除する、重複した要素だけ抽出する - Qiita
grep関数 - 特定の条件を満たす配列要素のみ取得 - PerlならサンプルコードPerl入門