2013-11-25 3 views
1

Если $ client_id не существует в @ping_host, он должен передать условие if, но он проходит только тогда, когда @ping_host пуст. Я что-то делаю неправильно?Как найти элемент в массиве?

if (!grep($client_id, @ping_host)) { 
      print "Client Id $client_name doesn't exist \n"; 
} 

ответ

1

Первого grep параметр должен быть тест, который возвращает логическое значение для каждого элемента @ping_host массива,

if (!grep($client_id eq $_, @ping_host)) { 
    print "Client Id $client_name doesn't exist \n"; 
} 
+0

это то же самое, если слишком – user1595858

+0

@ user1595858 да, эти эквиваленты (Grep {$ _ эк $ client_id} @ping_host!). –

3

Это несколько неэффективно использовать grep для этого, потому что она возвращает всех матчей в массив, тогда как вам все равно, если он имеет хотя бы один. Вы можете использовать none для этого, как:

use List::MoreUtils qw(none); 
if(none { $client_id eq $_ } @ping_host) { 
    print "Client Id $client_name doesn't exist \n"; 
} 
Смежные вопросы