in reply to Comparing arrays and returning number of similar elements

Try this.
my @arr1 =("fg", "dg", "tu","ph", "dgs",,"dg"); my @arr2 = ("dgs","sfd","dg","ph","rhd"); my %hash ; $hash{$_}++ for (@arr1,@arr2) ; print $_ ."\n" for grep {$hash{$_}>1}keys %hash ;
Thanks..

Replies are listed 'Best First'.
Re^2: Comparing arrays and returning number of similar elements
by Roy Johnson (Monsignor) on Feb 10, 2006 at 15:43 UTC
    Close. You need to count each array separately so that you can distinguish something appearing twice in one array from something that appears once in each array.
    my @arr1 = qw(one one two three four four four); my @arr2 = qw(two four four five five); my %hash ; ++$hash{$_}[0] for @arr1; ++$hash{$_}[1] for @arr2; for (keys %hash) { # Print the smaller count printf "$_ appears %d times in both arrays\n", $hash{$_}[0] < $hash{$_}[1] ? $hash{$_}[0] : $hash{$_}[1] if $hash{$_}[1] and $hash{$_}[0]; }

    Caution: Contents may have been coded under pressure.