in reply to Array compare

I'd use grep to find the exact matches and the numbers in one of the arrays (I used @A below) as keys in a hash (%in_A), built using a map. Finally another grep to find the matches in different columns:
use List::Util 'shuffle'; my @A = (shuffle 0 .. 5)[0 .. 3]; my @B = (shuffle 0 .. 5)[0 .. 3]; my $exact = grep { $A[$_] == $B[$_] } 0 .. 3; my %in_A = map { $_ => 1 } @A; my $inexact = (grep { $in_A{$_} } @B) - $exact; print "A = [@A]\nB = [@B]\n"; print "exact: $exact\n"; print "inexact: $inexact\n";

The inexact matches also includes the exact matches, hence the subtraction in the second grep.

Sample output:

A = [4 5 1 0] B = [3 1 5 0] exact: 1 inexact: 2

update: added sample output, improved output format & used grep to calculate inexact matches

Replies are listed 'Best First'.
Re^2: Array compare
by plink (Initiate) on Dec 23, 2007 at 11:57 UTC
    Thank you all for help and solutions

    The code written by FunkyMonk is simple and straight.
    and it works...