ключ соответствия perl grep из хеш-таблицы - PullRequest
0 голосов
/ 17 апреля 2019

Я имею дело с хэшем в Perl.

Я использую следующий оператор, чтобы проверить, соответствует ли переменная ключу в моей хеш-таблице. Утверждение уже оценивается как истинное. Так что grep работает. Но как я могу теперь получить хэш-ключ и значение, если есть совпадение?

if ( grep {/.*$var1*/} keys %my_hash ) {
  #print the key and value that results from the grep?
}

Ответы [ 2 ]

4 голосов
/ 17 апреля 2019

Вы можете извлечь все соответствующие ключи прямо в условии:

if (my @matches = grep /.*$var1*/, keys %my_hash) {
    my @values = @my_hash{@matches};
}

Кроме того, /.*$var1*/ странно. Вы хотите применить последнюю звездочку к тому, что будет последним в переменной? Кроме того, использование .* в начале ничего не дает, если нет /g: /$var1*/ будет работать так же (и, возможно, быстрее).

0 голосов
/ 17 апреля 2019
if (@captarr= grep {/.*$var1*/} keys %my_hash ) {
}

@captarr = grep (/.*$var1*/, keys %my_hash) - это функция с двумя аргументами;
1-й - это регулярное выражение, 2-й - массив, к которому применено регулярное выражение,
возвращает массив совпадений, как будто 2-й аргумент.массив - это одна строка, сделанная из массива, которая ищется в глобальном формате, и она будет возвращать nul, если ни один не найден.это похоже на @captarr = $my_str ~= /.*$var1*/ с измененной позицией аргумента LHS ~ = RHS

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