Проверьте, содержит ли "строка хеш-ключа" слово в perl

Я хочу проверить, присутствует ли конкретное слово в ключе хэша.

Я попробовал следующим образом:

while (($key, $value) = each(%hash))
{
   if( $key =~ /\b$some_word\b/ ) 
   {
      print"$key contains $some_word \n";
   } 
}

У меня вопрос есть ли встроенная функция для того же или есть альтернативный метод?

1 ответ

Решение
use warnings;
use strict;

my %hash = (
    'foo' => 1,
    'foo bar' => 2,
    'bar' => 3,
    'food' => 4
);

my $some_word = "foo";

for (grep /\b\Q$some_word\E\b/, keys %hash)
{
    print "$_ contains $some_word (value: $hash{$_})\n" 
}

Обновление: также включено значение.

Обновление 2: Спасибо, kenosis, за предложение модификатора кавычек (\Q...\E) что обычно является хорошей идеей при помещении переменной в регулярное выражение. Это гарантирует, что ничто в переменной не будет интерпретировано как метасимвол регулярного выражения.

Другие вопросы по тегам