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