Perl 我对foreach循环没有什么了解?

Perl 我对foreach循环没有什么了解?,perl,loops,for-loop,foreach,Perl,Loops,For Loop,Foreach,我一直认为 foreach (@arr) { .... } 及 上述代码位于cgi程序中的select标记之间。 基本上,我是根据用户规范编辑选择框的内容。 但在他们添加或删除选项后,我希望最初选择的选项保持选中状态 当重新组装下一个表单上的select时,上面的代码应该完成这一点。然而,对于foreach版本,它只会获得选中的第一个选项,而跳过其余的选项。如果我将它切换为3部分for循环,而不改变任何其他内容,它将按预期工作 这只是最近的一个例子,所以很明显我在这里遗漏了一些东西,有

我一直认为

foreach (@arr)
{
    ....
}

上述代码位于cgi程序中的select标记之间。 基本上,我是根据用户规范编辑选择框的内容。 但在他们添加或删除选项后,我希望最初选择的选项保持选中状态

当重新组装下一个表单上的select时,上面的代码应该完成这一点。然而,对于foreach版本,它只会获得选中的第一个选项,而跳过其余的选项。如果我将它切换为3部分for循环,而不改变任何其他内容,它将按预期工作

这只是最近的一个例子,所以很明显我在这里遗漏了一些东西,有人能帮我吗?

让我们假设@files是一个文件名列表

在以下代码中,$i是数组索引,即它是一个整数:

for (my $i=0; $i<@files; $i++) { ... }
例如:

use strict;
use warnings;

my @files = (
   'foo.txt',
   'bar.txt',
   'baz.txt',
);

print "for...\n";
for (my $i=0; $i<@files; $i++) {
   print "\$i is $i.\n";
}

print "foreach...\n";
foreach my $i (@files) {
   print "\$i is $i.\n";
}
foreach循环通常是通过数组循环的首选,以避免由诸如for my$i=1;…;之类的事情引起的意外off by one错误;。。。;。。。或者我的$i=0$我假设@files是一个文件名列表

在以下代码中,$i是数组索引,即它是一个整数:

for (my $i=0; $i<@files; $i++) { ... }
例如:

use strict;
use warnings;

my @files = (
   'foo.txt',
   'bar.txt',
   'baz.txt',
);

print "for...\n";
for (my $i=0; $i<@files; $i++) {
   print "\$i is $i.\n";
}

print "foreach...\n";
foreach my $i (@files) {
   print "\$i is $i.\n";
}

foreach循环通常是通过数组循环的首选,以避免由诸如for my$i=1;…;之类的事情引起的意外off by one错误;。。。;。。。或者我的$i=0$使用警告后再次提出iAsk问题;多亏了托比,我可能早就应该推断出,这实际上很方便$我有一些很好的讨论。使用警告后再问问题;多亏了托比,我可能早就应该推断出,这实际上很方便$我有一些很好的讨论。你认为for和foreach有不同的含义,这是不正确的,但是我对你的答案的理解超出了我的预期。如果你觉得我破坏了你想说的话,请将它还原为原始版本。你认为for和foreach有不同的含义是不正确的,但是我修改了你的答案,而不是我想要的。如果你觉得我破坏了你想说的话,请把它还原原样
use strict;
use warnings;

my @files = (
   'foo.txt',
   'bar.txt',
   'baz.txt',
);

print "for...\n";
for (my $i=0; $i<@files; $i++) {
   print "\$i is $i.\n";
}

print "foreach...\n";
foreach my $i (@files) {
   print "\$i is $i.\n";
}
for...
$i is 0.
$i is 1.
$i is 2.
foreach...
$i is foo.txt.
$i is bar.txt.
$i is baz.txt.
use strict;
use warnings;

my @files = (
   'foo.txt',
   'bar.txt',
   'baz.txt',
);

print "for...\n";
foreach (my $i=0; $i<@files; $i++) {
   print "\$i is $i.\n";
}

print "foreach...\n";
for my $i (@files) {
   print "\$i is $i.\n";
}