使用数组时的Perl语法

时间:2015-01-18 21:09:27

标签: arrays perl

嗨,我正在研究一些基于数组的代码,我得到了以下内容:

@array; #contains lines of text

for (0 .. $#array - 2)
{
   #code here
}

0 ..语法的目的是什么?基于这个例子它会做什么? 这与写foreach(@array -2)

有何不同?

1 个答案:

答案 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 $_;
}

您可能还会注意到forforeach在Perl中的含义完全相同。它们是彼此的别名,它们的工作方式没有区别。