Вложенные циклы foreach в Perl и переменная область видимости - PullRequest
1 голос
/ 01 марта 2011

Хорошо, это немного странно, и, похоже, это не должно работать. У меня есть foreach, вложенный в другой, и он мне нужен, чтобы получать только те значения, которые соответствуют внешнему циклу.

foreach my $var (@$list)
{
    foreach my $var2 (@$list2)
    {
        if($var2->[0] ne $var->[0])
        {
            print qq(They are equal);
        } else
        {
            next;
        }
    }
}

Кажется, это не работает. Есть ли какое-то правило, о котором я должен знать для определения объема во вложенных циклах? Тестирование показывает, что после ввода внутреннего цикла $ var перестает существовать, пока не завершится внутренний цикл.

Ответы [ 3 ]

3 голосов
/ 01 марта 2011

Кажется, это не сработает, потому что вы проверяете, равны ли две строки не равны , а затем печатаете, что они равны.

Также вы должны сделать это print qq(They are equal\n);

Между прочим, нет проблем с определением объема.Ваши строки либо совпадают, либо не совпадают - в зависимости от того, какого результата вы ожидали.

2 голосов
/ 01 марта 2011

Я не думаю, что проблема с ограничением доступа - твоя проблема. Вы использовали ne , а затем напечатали «Они равны». Если вы ожидаете, что они будут равны, вы должны использовать eq . Смотрите ниже:

foreach my $var (@$list){
    foreach my $var2 (@$list2){
        if($var2->[0] eq $var->[0]) {
            print qq(They are equal);
        } else {
            next;
        }
    }
}
0 голосов
/ 30 мая 2013

Я думаю, что это проблема с областью видимости, так как я столкнулся с проблемой в моем коде. когда я печатаю переменную во внешнем foreach, она печатается правильно, но когда я пытаюсь напечатать внешнюю переменную foreach внутри внутреннего foreach, она печатает только инициализированное значение внешней переменной.

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