嗨,我正在研究一些基于数组的代码,我得到了以下内容:
@array; #contains lines of text
for (0 .. $#array - 2)
{
#code here
}
0 ..
语法的目的是什么?基于这个例子它会做什么?
这与写foreach(@array -2)
?
答案 0 :(得分:5)
..
是range operator。它可以以两种相当不同的方式使用,具体取决于它发生的上下文。在这种情况下,您使用 list 上下文,在这种情况下您的代码
for (0 .. $#array - 2)
类似于
for (local $_ = 0; $_ <= $#array - 2; $_++)
换句话说,它会创建一系列数字,从0
到$#array - 2
。
范围运算符也可以在标量上下文中使用,在这种情况下,它会跟踪状态。但这是另一个问题。
这与
不同foreach(@array -2)
请注意,在此表达式中,@array
运算符将数组-
置于标量上下文中,并返回其大小。它只会为for
循环创建一个值,这就是数组的大小减去2.假设列表有10个元素,那么你得到:
foreach (8)
这只是一个项目列表的循环(数字8
),并不是很有用。所以区别很大,而且无法解释,真的。我认为你的意思是:
foreach (@array[0 .. $#array - 2])
这是使用array slice的循环。在这种情况下,您循环遍历数组的值,而不是索引。 E.g。
for (0 .. $#array) {
print $array[$_];
}
VS
for (@array) {
print $_;
}
您可能还会注意到for
和foreach
在Perl中的含义完全相同。它们是彼此的别名,它们的工作方式没有区别。