Что я не получаю о циклах foreach?

Я всегда понимал, что

foreach (@arr)
{
    ....
}

а также

for(my $i=0; $i<@arr; $i++)
{
    .....
}

были функционально эквивалентны. Тем не менее, во всем моем коде всякий раз, когда я используюforeach цикл я сталкиваюсь с проблемами, которые исправляются, когда я перехожу наfor петля. Это всегда связано со сравнением значений двух вещей, обычно с вложенными циклами.

Вот пример:

for(my $i=0; $i<@files; $i++)
{
    my $sel;
    foreach (@selected)
    {
        if(files[$i] eq selected[$_])
        {
            $selected='selected';
        }
    }
    <option value=$Files[$i] $sel>$files[$i]</option>
}

Приведенный выше код находится между тегами select в программе cgi. В основном я редактирую содержимое поля выбора в соответствии с пользовательскими спецификациями. Но после того, как они добавляют или удаляют варианты, я хочу, чтобы варианты, которые были первоначально выбраны, оставались выбранными.

Приведенный выше код должен выполнить это при повторной сборке выбора в следующей форме. Однако сforeach версия получает только первый выбранный вариант и пропускает остальные. Если я переключу его на 3 частиfor цикл, ничего не меняя, он будет работать как задумано.

Это только недавний пример, так что я явно что-то здесь упускаю, кто-нибудь может мне помочь?

Ответы на вопрос(1)

Ваш ответ на вопрос