Решение CPAN: используйте List::MoreUtils
use List::MoreUtils qw{any};
print "found!\n" if any { $_ == 7 } (7,101,80,22,42);
Если вам нужно выполнить МНОГИЕ МНОГИЕ поиски в одном и том же массиве, более эффективный способ - сохранить массив в хэшеодин раз и посмотрите в хэше:
@int_array{@int_array} = 1;
foreach my $lookup_value (@lookup_values) {
print "found $lookup_value\n" if exists $int_array{$lookup_value}
}
Зачем использовать это решение поверх альтернатив?
Невозможно использовать умное совпадение в Perl до 5.10.Согласно этому посту, написанному Брайаном Д Фой] 2 , интеллектуальное совпадение - это короткое замыкание, поэтому оно так же хорошо, как «любое» решение для 5.10.
grep
Solution просматривает весь список , даже если первый элемент из 1 000 000 длинных списков совпадает.any
замкнет и прекратит работу в тот момент, когда будет найдено первое совпадение, поэтому оно более эффективно.В оригинальном плакате явно сказано «без циклического прохождения каждого элемента»
Если вам нужно выполнить МНОЖЕСТВО поисков, то единовременная неоправданная стоимость создания хеша делает метод поиска хешей МНОГО более эффективнымчем любой другой.Подробнее см. в этом сообщении