@b1
viene valutata a true (si tratta di un array con un non-zero numero di elementi), quindi il test booleano nella vostra grep costrutto (not @b1
) restituirà sempre false. grep filtra una matrice restituendo solo gli elementi per i quali il test booleano restituisce true.
È necessario verificare se $_
(l'elemento di matrice attualmente in considerazione) è in @bl
oppure no. Un modo per farlo è quello di generare un hash temporanea utilizzando @bl
come le chiavi, poi nel vostro check dichiarazione grep per la presenza di $_
nelle chiavi di 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];
fonte
2011-02-03 21:36:22
“sottrarre” non è il diritto parola qui. Quando ** fai ** trova la parola giusta, scoprirai che è quella che innesca un attacco hash pavloviano. – tchrist