使用数组时的 Perl 语法
Perl syntax when working with arrays
你好,我正在研究一些基于数组的代码,我遇到了以下内容:
@array; #contains lines of text
for (0 .. $#array - 2)
{
#code here
}
0 ..
语法的目的是什么?它会根据这个例子做什么?
这与写作 foreach(@array -2)
有何不同?
..
就是range operator。它可以以两种截然不同的方式使用,具体取决于它出现的上下文。在这种情况下,您使用的是 list 上下文,在这种情况下,您的代码
for (0 .. $#array - 2)
类似于
for (local $_ = 0; $_ <= $#array - 2; $_++)
换句话说,它创建了一个数字范围,从 0
到 $#array - 2
。
范围运算符也可以用在标量上下文中,在这种情况下它会跟踪状态。但那是另一个问题了。
这不同于
foreach(@array -2)
请注意,在此表达式中,数组 @array
由 -
运算符放入标量上下文中,并将 return 其大小。它只会为 for
循环创建一个值,即数组的大小减去 2。假设列表有 10 个元素,那么你会得到:
foreach (8)
这只是对一个项目(数字 8
)列表的循环,不是很有用。所以差异很大,真的没有解释的意义。我假设你的意思是:
foreach (@array[0 .. $#array - 2])
这是一个使用 array slice 的循环。在这种情况下,您将遍历数组的值,而不是索引。例如
for (0 .. $#array) {
print $array[$_];
}
对
for (@array) {
print $_;
}
您可能还注意到 for
和 foreach
在 Perl 中的意思完全相同。它们互为别名,工作方式没有区别。
你好,我正在研究一些基于数组的代码,我遇到了以下内容:
@array; #contains lines of text
for (0 .. $#array - 2)
{
#code here
}
0 ..
语法的目的是什么?它会根据这个例子做什么?
这与写作 foreach(@array -2)
有何不同?
..
就是range operator。它可以以两种截然不同的方式使用,具体取决于它出现的上下文。在这种情况下,您使用的是 list 上下文,在这种情况下,您的代码
for (0 .. $#array - 2)
类似于
for (local $_ = 0; $_ <= $#array - 2; $_++)
换句话说,它创建了一个数字范围,从 0
到 $#array - 2
。
范围运算符也可以用在标量上下文中,在这种情况下它会跟踪状态。但那是另一个问题了。
这不同于
foreach(@array -2)
请注意,在此表达式中,数组 @array
由 -
运算符放入标量上下文中,并将 return 其大小。它只会为 for
循环创建一个值,即数组的大小减去 2。假设列表有 10 个元素,那么你会得到:
foreach (8)
这只是对一个项目(数字 8
)列表的循环,不是很有用。所以差异很大,真的没有解释的意义。我假设你的意思是:
foreach (@array[0 .. $#array - 2])
这是一个使用 array slice 的循环。在这种情况下,您将遍历数组的值,而不是索引。例如
for (0 .. $#array) {
print $array[$_];
}
对
for (@array) {
print $_;
}
您可能还注意到 for
和 foreach
在 Perl 中的意思完全相同。它们互为别名,工作方式没有区别。