使用数组时的 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 $_;
}

您可能还注意到 forforeach 在 Perl 中的意思完全相同。它们互为别名,工作方式没有区别。