2012-02-09 2 views
-1

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

{ 
      'Customer' => {'123abc' => 
         {'status' => 
            {'New' => 
               {'email'=>['[email protected]' ], 
               'template' => 'XYZ' } 
                     } 
                  }, 
         '234' => 
         {'status' => 
            {'New' => 
              {'email' => ['[email protected]' ], 
              'template' => 'XYZ' } 
                      } 
                   } 

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

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

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

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

Это вернет матч на «123abc»

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

Я пробовал;

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

основан на примере смарт Matching на этом сайте «печать„У нас есть несколько подростков \ п“, если /.*teen$/ ~~% ч;».

и

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

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

Джон

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

+0

perl, php? какой язык? – hvgotcodes

+0

234 в $ customers [0] должно совпадать с чем? «234abc», «adb234», оба? – cirne100

+0

он должен совпадать как с –

ответ

1

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

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

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

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

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

+0

Мне нужно будет подумать, когда у меня есть сценарий передо мной, когда я вернусь во вторник. –

+0

Весь поток сценария состоит в том, чтобы прочитать файл конфигурации xml в хеш-массив. Затем прочитайте файл в хэш, который имеет номер и статус заказа. Затем выполните SQL-запрос и запишите результаты в массив. Затем он перемещается по массиву и анализирует различия состояния с хешем состояния. если он находит изменение, он соответствует клиенту и статусу в хэш-конфигурации и, если он находит совпадение, выполняется дополнительная обработка. Отлично работает в точном совпадении, но мне нужно сопоставить несколько клиентов в массиве результатов sql с одной записью в массиве config. –

Смежные вопросы