@b1
để đánh giá đúng (nó là một mảng với một tổ chức phi zero số phần tử), vì vậy kiểm tra boolean trong grep của bạn xây dựng (not @b1
) sẽ luôn trả về false. grep lọc một mảng chỉ trả về các phần tử mà phép thử boolean trả về true.
Bạn cần kiểm tra xem liệu $_
(yếu tố mảng hiện đang được xem xét) có đang ở trong @bl
hay không. Một cách để làm điều này là để tạo ra một băm tạm thời sử dụng @bl
như các phím, sau đó trong tầm kiểm soát tuyên bố grep của bạn cho sự hiện diện của $_
trong các phím băm:
#!/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];
Nguồn
2011-02-03 21:36:22
“trừ” không phải là bên phải từ đây. Khi bạn ** làm ** tìm đúng từ, bạn sẽ phát hiện ra từ đó là từ kích hoạt tấn công băm Pavlovian. – tchrist