2014-02-05 3 views
0

У меня есть массив из сообщения, который содержит пару значений, и я пытаюсь выполнить сравнение, чтобы узнать, содержит ли массив определенные строки.Array показывает только первое значение при сравнении

так:

if ($q->param('tradesFour[]') =~ m/Steel/) 

datadump массива выглядит следующим образом:

'tradesFour[]' => [ 
    'Street/Road', 
    'Steel Erection' 
], 

, но когда я делаю это, если заявление не соответствует действительности, а также при печати tradesFour [] это просто дает мне первое значение. Как я могу заставить это работать правильно?

+0

Что такое '$ q'? Это должен быть объект, который принимает метод param. – Borodin

+0

@Borodin my '$ q = CGI-> new();' – BluGeni

+1

"Steel Erection"? <Вставить нечеткую шутку здесь> – ThisSuitIsBlackNot

ответ

3

В скалярном контексте CGI::param вернет только первое значение параметра. Вы должны указать контекст списка, чтобы получить все из них.

Вы можете написать свой тест, как этот

if (grep /Steel/, $q->param('tradesFour[]')) { ... } 

, в котором проверяет все значения в списке и возвращает их количество, которые соответствуют регулярному выражению.

+0

Вам не нужен массив для соответствия grep? –

+0

'grep' требует наличия списка. 'CGI :: param' возвращает список значений, когда он вызывается в контексте списка. – Borodin

+0

(Фактически, в скалярном контексте он не может возвращать ничего, кроме одного значения) – ikegami

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