use Data::Dumper; use strict; sub count_unique { print Dumper \@_; my %uniq; $uniq{0+\$_}++ foreach @_; return sprintf ( "CTU: %d unique entities (%d duplicates):\n", scalar keys %uniq, scalar ( grep { $uniq{$_} > 1 } keys %uniq ), ); } sub find_unique_items_in { my $set = shift; print Dumper $set; my (%uniq, @out) = (); for my $i (@$set) { $uniq{ $i }++; } return sprintf ( "FUI: %d unique entities (%d duplicates):\n", scalar keys %uniq, scalar ( grep { $uniq{$_} > 1 } keys %uniq ), ); } my ($x,$y,$z)=qw(a b c); print count_unique($x,$y,$z),$/; print find_unique_items_in([\$x,\$y,\$z]),$/; print count_unique($x,$y,$y),$/; print find_unique_items_in([\$x,\$y,\$y]),$/; print count_unique($x,$x,$y,$y),$/; print find_unique_items_in([\$x,\$x,\$y,\$y]),$/; print count_unique($z,$z,$z,$z),$/; print find_unique_items_in([\$z,\$z,\$z,\$z]),$/; print count_unique($x,$x,$y,$y,$z,$z),$/; print find_unique_items_in([\$x,\$x,\$y,\$y,\$z,\$z]),$/; __END__ $VAR1 = [ 'a', 'b', 'c' ]; CTU: 3 unique entities (0 duplicates): $VAR1 = [ \'a', \'b', \'c' ]; FUI: 3 unique entities (0 duplicates): $VAR1 = [ 'a', 'b', ${\$VAR1->[1]} ]; CTU: 2 unique entities (1 duplicates): $VAR1 = [ \'a', \'b', $VAR1->[1] ]; FUI: 2 unique entities (1 duplicates): $VAR1 = [ 'a', ${\$VAR1->[0]}, 'b', ${\$VAR1->[2]} ]; CTU: 2 unique entities (2 duplicates): $VAR1 = [ \'a', $VAR1->[0], \'b', $VAR1->[2] ]; FUI: 2 unique entities (2 duplicates): $VAR1 = [ 'c', ${\$VAR1->[0]}, ${\$VAR1->[0]}, ${\$VAR1->[0]} ]; CTU: 1 unique entities (1 duplicates): $VAR1 = [ \'c', $VAR1->[0], $VAR1->[0], $VAR1->[0] ]; FUI: 1 unique entities (1 duplicates): $VAR1 = [ 'a', ${\$VAR1->[0]}, 'b', ${\$VAR1->[2]}, 'c', ${\$VAR1->[4]} ]; CTU: 3 unique entities (3 duplicates): $VAR1 = [ \'a', $VAR1->[0], \'b', $VAR1->[2], \'c', $VAR1->[4] ]; FUI: 3 unique entities (3 duplicates):