Что я не получаю о циклах 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
цикл, ничего не меняя, он будет работать как задумано.
Это только недавний пример, так что я явно что-то здесь упускаю, кто-нибудь может мне помочь?