Perl中'for'和'foreach'之间有什么区别?

时间:2010-02-17 09:19:54

标签: perl loops syntax for-loop foreach

我看到这些可以互换使用。有什么区别?

8 个答案:

答案 0 :(得分:38)

没有区别。来自perldoc perlsyn

  

foreach关键字实际上是for关键字的同义词,因此您可以使用foreach表示可读性,或for表示简洁。

答案 1 :(得分:15)

  

我看到这些可以互换使用。

除语法之外没有区别。

答案 2 :(得分:6)

四个字母。

他们功能相同,只是拼写不同。

答案 3 :(得分:4)

自{{}}}以来,foreachfor同义。这是对C shell的introduction in perl-2.0命令的点头。

在我自己的代码中,在极少数情况下,我使用的是C风格的for循环,我写了

for (my $i = 0; $i < $n; ++$i)

但是为了迭代一个数组,我拼出

foreach my $x (@a)

我发现它在我脑海中读得更好。

答案 4 :(得分:2)

来自http://perldoc.perl.org/perlsyn.html#Foreach-Loops

  

foreach关键字实际上是for关键字的同义词,所以你   也可以使用。如果省略VAR,则为每个值设置$ _。

# Perl's C-style
for (;;) {
    # do something
}

for my $j (@array) {
    print $j;
}

foreach my $j (@array) {
    print $j;
}

然而:

  

如果LIST的任何部分是一个数组,如果你,foreach将会非常困惑   添加或删除循环体内的元素,例如使用拼接。   所以不要这样做。

答案 5 :(得分:1)

  

foreach关键字实际上是for关键字的同义词,因此您可以将foreach用于可读性或简洁性。 (或者因为Bourne shell比csh更熟悉,所以写作更自然。)如果省略VAR,则为每个值设置$ _。

答案 6 :(得分:-2)

有一个微妙的区别(http://perldoc.perl.org/perlsyn.html#Foreach-Loops):

  

foreach循环遍历正常列表值并依次将变量VAR设置为列表的每个元素。如果变量前面带有关键字my,则它是词法范围的,因此仅在循环中可见。否则,该变量隐含在循环的本地,并在退出循环时重新获得其前一个值。如果先前使用my声明了变量,它将使用该变量而不是全局变量,但它仍然本地化为循环。这种隐式定位仅在foreach循环中发生。

这个程序:

#!/usr/bin/perl -w

use strict;

my $var = 1;
for ($var=10;$var<=10;$var++) {
  print $var."\n"; # print 10
  foo(); # print 10
}

print $var."\n"; # print 11    

foreach $var(100) {
  print $var."\n"; # print 100
  foo(); # print 11 !
}

sub foo {
  print $var."\n";
}

将产生:

10
10
11
100
11

答案 7 :(得分:-3)

如果是“for”,您可以使用这三个步骤。

1)初始化   2)状态检查   3)递增或递减

但是在“foreach”的情况下,你无法增加或减少该值。它总是将增量值设为1.