什么';这是';对于';和';foreach&x27;用Perl?
我看到这些可以互换使用。有什么区别 我看到这些可以互换使用什么';这是';对于';和';foreach&x27;用Perl?,perl,loops,syntax,for-loop,foreach,Perl,Loops,Syntax,For Loop,Foreach,我看到这些可以互换使用。有什么区别 我看到这些可以互换使用 除了语法上的区别之外,没有其他区别。没有区别。发件人: foreach关键字实际上是for关键字的同义词,因此您可以使用foreach以提高可读性,或者使用for以简化操作 四个字母 它们在功能上完全相同,只是拼写不同。自其出现以来,foreach一直是for的同义词。这是对C shell命令的点头 在我自己的代码中,在使用C风格for循环的罕见情况下,我编写 for (my $i = 0; $i < $n; ++$i) 我发现
除了语法上的区别之外,没有其他区别。没有区别。发件人:
foreach
关键字实际上是for
关键字的同义词,因此您可以使用foreach
以提高可读性,或者使用for
以简化操作
四个字母
它们在功能上完全相同,只是拼写不同。自其出现以来,foreach
一直是for
的同义词。这是对C shell命令的点头
在我自己的代码中,在使用C风格for循环的罕见情况下,我编写
for (my $i = 0; $i < $n; ++$i)
我发现这样在我的脑海里读起来更好。如果是“for”,你可以使用这三个步骤
1) 初始化
2) 状态检查
3) 增加或减少
但在“foreach”的情况下,不能增加或减少值。它总是将增量值取为1
foreach关键字实际上是for关键字的同义词,因此可以使用foreach以提高可读性或简洁性。(或者因为您对Bourne shell比csh更熟悉,所以编写for更自然。)如果省略VAR,则将$u设置为每个值
有一个微妙的区别(): 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";
}
从
foreach关键字实际上是for关键字的同义词,因此
两种方法都可以。如果省略了VAR,则将$\设置为每个值
然而:
若列表的任何部分是数组,若您
在回路主体内添加或删除图元,例如使用接头。
所以不要那样做
+1是的,Perl在语法方面非常丰富。有不止一种说法,实际上是编译到相同的操作码。因此,无论出于何种目的,它们都是相同的。我发现恰恰相反:我总是对我的$x(@a)使用
。我更喜欢Python的for a
循环中的x,或者甚至是PHP的for(@a as$x)
。我从不在循环中使用C风格的。我会把你拥有的东西写成我的$I(0..$n)
。Perl special case对其进行了优化,以避免创建不必要的列表,因此它与显式C-stylefor
循环之间的差异应该可以忽略不计,而且我认为这样更具可读性。@Chris Lutz:所以你永远不需要做比1乘1更复杂的事情了?我可以想到几个不同的应用程序,其中C风格的循环是编写它的最佳方式。我现在能想到的最简单的例子是,只想用(我的$I=1;$I<@x;$I+=2){…}
之类的东西来冒险,它们过去是不同的想法,但现在是同义词。Perl根据()中的内容而不是使用关键字来确定要做什么。责怪那些不能多输入四个字符的人。:)这也被解释了,这实际上是一个错误的答案,因为这发生在for
和foreach
循环中。您可以自己尝试—如果您在代码中翻转for
和foreach
,没有发生任何错误,结果是一样的:foreach调用foo()打印全局$var的值(因此为1),因为对foo()的“for”调用打印的是本地$var的值(因此为10),而不是我得到的值。我在翻页前后得到10 10 11 100 11。在linux x86_64上使用perl 5.10.1。@pera答案和示例都是错误的。范围或其他方面的任何差异都是由括号内的内容设置的,而不是由关键字本身设置的。这不是真的。您可以对两个关键字(for和foreach)使用这两种语法约定,除了关键字本身没有任何区别。它将循环5次打印12345,我们没有使用您提到的步骤<代码>为(1..5)打印$uu
#!/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
# Perl's C-style
for (;;) {
# do something
}
for my $j (@array) {
print $j;
}
foreach my $j (@array) {
print $j;
}