La primera arg que le dé a grep debe evaluarse como verdadera o falsa para indicar si hubo una coincidencia. Por lo que debe ser:
# note that grep returns a list, so $matched needs to be in brackets to get the
# actual value, otherwise $matched will just contain the number of matches
if (my ($matched) = grep $_ eq $match, @array) {
print "found it: $matched\n";
}
Si tiene que coincidir en una gran cantidad de diferentes valores, sino que también valdría la pena para que usted considere poner los datos array
en un hash
, ya que los hashes le permiten hacer esto de manera eficiente y sin tener que iterar a través de la lista.
# convert array to a hash with the array elements as the hash keys and the values are simply 1
my %hash = map {$_ => 1} @array;
# check if the hash contains $match
if (defined $hash{$match}) {
print "found it\n";
}
Creo que se podría volver a la palabra que esto sea más claro - aunque puedo ver lo que quiere decir en la re-lectura, en un principio suena como usted están diciendo que 'grep' en el contexto escalar devuelve la longitud de' @ array'. Como usted (con razón) pretendía, devuelve el número de veces que la expresión/bloque es verdadera. Si la expresión es * solo una variable * - es decir, no hay comparación real, solo la variable '$ match', entonces es verdadera para cada elemento si la variable en sí es verdadera (no vacía, distinta de cero, etc.) –
@Sam : He intentado reformularlo, espero que ahora esté más claro. –
@eugeney que me lee mucho mejor, ¡genial! –