проверка на наличие ключа с подстрокой - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть многомерный хеш / массив, который выглядит так, используя datadumper;

{
          'Customer' => {'123abc' => 
                         {'status' => 
                                     {'New' => 
                                              {'email'=>['user@xxx.com' ], 
                                               'template' => 'XYZ' }
                                                                       }
                                                           },
                        '234' => 
                        {'status' => 
                                    {'New' => 
                                            {'email' => ['user@xxx.com' ],
                                            'template' => 'XYZ' }
                                                                            }
                                                                }

$customers = ("123abc", "234abc", "adb234");

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

Код, который я использую для полных совпадений, работает нормально;

foreach (@customers) {
if ($config->{Customer}->{$customers[0]}) {
do something
} }

Это вернет совпадение на "123abc"

Но я не могу заставить его соответствовать, когда есть строка 234 в $ Customers [0] или просто тестирование без массива $ customer и использованием только строки.

Я пытался;

if (/.234*$/ ~~ %config->{Customer})

на основе примера Smart Matching на этом сайте "print" У нас есть подростки \ n "if /.*teen$/ ~~% h;".

и

if (exists $config->{Customer}->{/234/}

, а также использование m в начале регулярного выражения. {М / 234 /}

Jon

Это написано на Perl.

1 Ответ

1 голос
/ 10 февраля 2012

Похоже, вы хотите просмотреть все ключи.

my @keys = grep { /234/ } keys %{$config->{Customer}};
if (@keys) {
  # do something, but check for multiple matches...
}

Grep возвращает все элементы, где блок оценивается как true, причем каждый элемент представлен $ . Соответствие регулярному выражению (//) по умолчанию совпадает с $ . Вышеприведенное утверждение может быть переписано как

my @keys = grep { $_ =~ /234/ } keys %{$config->{Customer}};
if (@keys) {
  # do something, but check for multiple matches...
}

Но это излишне, если вы знакомы с Perl.

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