Как исключить имена хостов в Perl - PullRequest
0 голосов
/ 02 октября 2018

Я очень незнаком с синтаксисом perl и пытаюсь изменить существующий скрипт, чтобы исключить конкретное имя хоста из результатов.

Имена хостов:

router-<something>
switch-<something>

Я бы хотел исключить из результатов все результаты, начинающиеся с «router».

Эта строка в существующих состояниях скрипта:

    # These are hosts that we don't want to alert about.
    my %exclude_hosts = map { $_ => 1 } split(',', $exclude_hosts || '');

Итак, два вопроса:

  1. Я пытаюсь понять, что "карта" делает в Perl и что конкретно map { $_ => 1 }

  2. Как мне вставить логику в это утверждение, чтобы исключить все хосты, начинающиеся с "router"?

1 Ответ

0 голосов
/ 02 октября 2018

Эта строка создает справочную таблицу, в которой для каждого хоста есть тривиальная (1) запись.

Встроенная map берет список и генерирует выходной списокзапустив код в блоке для каждого элемента, доступного в специальной переменной $_.Возвращение последнего вычисленного оператора в блоке для каждого элемента, который может быть одним или несколькими скалярами (или ни одного), сведено в список, который в конечном итоге возвращается.

Здесь вы получаете пару для каждого элементасам элемент $_ и 1 (оператор => представляет собой ,, который цитирует его левый операнд).Список четного размера может быть назначен хэшу (словарю), в результате чего последовательные элементы становятся парами ключ-значение.Таким образом, каждый хост (в $_) становится ключом со значением 1.

Затем, чтобы исключить элемент, либо отфильтруйте список, заданный для map, используя grep

my %exclude_hosts = 
    map { $_ => 1 } 
    grep { not /^router/ } 
    split(',', $exclude_hosts || '');

или сделайте это в самом map

my %exclude_hosts = 
    map { (not /^router/) ? $_ => 1 : () } 
    split(',', $exclude_hosts || '');

, где пустой список () сгладится в возвращаемом списке map, таким образом исчезнув.

Для получения более подробной информации см. Связанную документацию.

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