my %non_duplicates = do{ local %_; $_{$_}++ for(@array1, @array2, @array3); delete @_{ (map{ ($_{$_}>1) ? $_ : () ; } keys %_ ) }; %_; }; dump_ref(\%non_duplicates, '%non_duplicates'); __OUTPUT__ %non_duplicates = { '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1, '6' => 1, '7' => 1, '8' => 1, '9' => 1, '31' => 1, '32' => 1, '33' => 1, '34' => 1, '35' => 1, '36' => 1, '37' => 1, '38' => 1, '39' => 1, '40' => 1 }