Что делает этот код? - PullRequest
3 голосов
/ 04 апреля 2011

Это делает то, что я хотел бы

if (grep {/$dn/} @ad_sys) {
    $is_system = 1;
}

, но это всегда возвращает 1.

if (grep $_ == $dn, @ad_sys) {
    $is_system = 1;
}

Что делает второй кусок?

Ответы [ 3 ]

5 голосов
/ 04 апреля 2011

== используется для числового сравнения, если вам нужно сравнение строк, используйте eq.

4 голосов
/ 04 апреля 2011

Отфильтровывает те элементы из списка @ad_sys, которые численно равны $ dn. Затем, если результат не пустой, условие истинно и вводится блок if.

3 голосов
/ 04 апреля 2011

Есть два различия между двумя частями кода.

Во-первых, как уже отмечали другие, существует проблема с оператором числового сравнения.

Но во-вторых, / $ dn / проверяет, содержит ли $ _ данные в $ dn. $ _ eq $ dn проверяет, точно ли $ _ равно $ dn.

Это различие может вызвать проблему, например, если ваши данные состоят из строк, прочитанных из файла, который не был обработан для удаления новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...