@b1
se evalúa como verdadera (que es una matriz con un no-cero número de elementos), por lo que la prueba booleana en su grep constructo (not @b1
) siempre devolverá falso. grep filtra una matriz que devuelve solo los elementos para los cuales la prueba booleana devuelve verdadero.
Debe probar para ver si $_
(el elemento de la matriz actualmente bajo consideración) está en @bl
o no. Una forma de hacer esto es generar un hash temporal utilizando @bl
como las claves, a continuación, en su cheque comunicado grep la presencia de $_
en las claves hash:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @bl = qw(red green blue);
my @a = qw(green yellow purple blue pink);
# create a hash
my %h;
# nifty trick - use a hash slice to populate the
# hash. The values are irrelevant so we'll use @bl
# for those too
@h{@bl} = @bl;
print Dumper [grep {!exists $h{$_}} @a];
“sustraer” no es la correcta palabra aquí Cuando ** encuentres ** la palabra correcta, descubrirás que es una que desencadena un ataque hash Pavloviano. – tchrist