Nếu bạn đang sử dụng Perl 5.10 trở lên (hoặc sẵn sàng sử dụng tính năng thử nghiệm trong perl 5.18 trở lên), toán tử Smart Match sẽ thực hiện chính xác những gì bạn đang tìm kiếm.
# if Perl 5.18 or higher; otherwise not needed
no warnings 'experimental::smartmatch';
my @filter = qw(X Y Z);
my $not_in_filter = scalar grep { ! ($_ ~~ @filter) } @array;
Nếu bộ lọc và/hoặc @array lớn, có thể chậm, tuy nhiên, do nó là O (N^2). Trong trường hợp đó, bạn vẫn có thể sử dụng phù hợp với thông minh, và chỉ cần thay đổi bộ lọc của bạn:
my %filter = map { $_ => 1 } qw(X Y Z);
my $not_in_filter = scalar grep { ! ($_ ~~ %filter) } @array;
Xem Smart Matching in Detail trong perldoc perlsyn
để biết thêm.
Ngoài ra, nếu bạn cần hỗ trợ các phiên bản perl giữa 5.10 và 5.18, hãy xem xét sử dụng mô-đun cpan experimental
. Điều này hiện kiểm tra phiên bản và bao gồm các 'không có cảnh báo' nếu nó tìm thấy một phiên bản Perl đòi hỏi nó.
use experimental 'smartmatch';
Xem: https://search.cpan.org/~leont/experimental-0.016/lib/experimental.pm
Nguồn
2011-01-26 20:47:26
Đó là thư viện tiện dụng, cảm ơn bạn :) – trinity