#!/usr/bin/perl use strict; use warnings; my @unique = (); my %seen = (); foreach my $elem (@originalarray) { next if $seen{$elem}++; push @unique, $elem; } my ( @union, @intersection, @difference ); my %count; my $element; @union = @intersection = @difference = (); %count = (); foreach $element ( @originalarray, @unique ) { $count{$element}++ } foreach $element ( keys %count ) { push @union, $element; push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element; } while ( ( my $key, my $value ) = each(%count) ) { print "", ( $value - 2 ) . " " . $key if ( $value >= 3 ); }