En primer lugar, los 2 arrays necesitan ser escritas correctamente.
@a = ("abc","def","efg","ghy","klm","ghn");
@b = ("def","efg","ghy","klm","ghn","klm");
En segundo lugar, para las matrices arbitrarias (por ejemplo, matrices cuyos elementos pueden ser referencias a otras estructuras de datos) que puede utilizar Data::Compare
.
Para matrices cuyos elementos son escalares, puede hacer una comparación usando List::MoreUtils
pairwise BLOCK ARRAY1 ARRAY2
, donde BLOCK es su subrutina de comparación. Puede emular pairwise
(si usted no tiene una lista de acceso :: MoreUtils) a través de:
if (@a != @b) {
$equals = 0;
} else {
$equals = 1;
foreach (my $i = 0; $i < @a; $i++) {
# Ideally, check for undef/value comparison here as well
if ($a[$i] != $b[$i]) { # use "ne" if elements are strings, not numbers
# Or you can use generic sub comparing 2 values
$equals = 0;
last;
}
}
}
P. S. No estoy seguro, pero List::Compare siempre puede ordenar las listas. No estoy seguro de si puede hacer comparaciones por parejas.
Debido a que su pregunta no es clara, que está recibiendo dos tipos de respuestas: (1) los que la búsqueda de coincidencias de pares, como '$ a [$ i] eq $ b [$ i] '; y (2) aquellos que buscan cualquier coincidencia, como '$ a [$ i] eq $ b [$ j]'. ¿Cuál es tu objetivo? – FMc
posible duplicado de http://stackoverflow.com/questions/1609467/in-perl-is-there-a-built-in-way-to-compare-two-arrays-for-equality –
@Sinan: esa pregunta marcado como "posible duplicado" no es lo mismo que este. Se trata de comparar todos los elementos de dos matrices, pero esta se trata de encontrar un elemento común. –