use strict; use warnings; use Data::Dumper; my @a = (43,43,44); my @b = (43,43); my @c= difference(\@a, \@b); print Dumper \@c; my @p = ( 1,1,1,1,1,2,2,2,3,3,4,5,6); my @q = ( 1,2,3,4,5,6 ); my @r= difference(\@p, \@q); print Dumper \@r; sub difference { my ($a, $b)= @_; my %d; ++$d{$_} foreach @$a; --$d{$_} foreach @$b; return map { ($_) x abs $d{$_} } keys %d; }