The 'subcode' indeed would work, it looks something like:
#!/usr/bin/perl
use strict;
sub compare ($$) {
my ($a,$b) = @_;
my $ok = 0;
for (my $i=0; $i < scalar(@{$a}); $i++) {
if ( @{$a}[$i] eq @{$b}[$i] && @{$a}[$i] ne "_" ) {
#compatible...
$ok=1;
} elsif (@{$a}[$i] ne @{$b}[$i] && (@{$a}[$i] ne "_" &&
@{$b}[$i] ne "_") ) {
# totally not compatible
return 0;
}
}
$ok;
}
my @a1 = qw(_ 8 _ _ 3 _ _ 1 9);
my @a2 = qw(2 _ 8 _ _ _ 7 _ _);
my @a3 = qw(4 8 _ _ _ _ _ 7 _);
my @a4 = qw(4 8 _ _ _ _ 7 _ _);
print ( "1: " . compare(\@a1, \@a2) ."\n" );
print ( "2: " . compare(\@a1, \@a3) ."\n" );
print ( "3: " . compare(\@a1, \@a4) ."\n" );