我正在运行以下代码,我试图通过@rainbow
数组中的倒数第五个元素打印@rainbow
数组中的第一个元素。此代码适用于数组边界内的任何正索引,但不适用于负数:
@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
答案 0 :(得分:39)
你想要
my @slice = @rainbow[0 .. $#rainbow - 5];
小心,1是第二个元素,而不是第一个元素。
答案 1 :(得分:18)
..
运算符从左到右形成range - 如果右边大于或等于左边。此外,在Perl中,数组索引从零开始。
这个怎么样?
@slice = @rainbow[0..$#rainbow-5];
$#array
为您提供数组中最后一个元素的索引。
答案 2 :(得分:5)
range operator中记录的perlop的前两句话:
二进制“..”是范围运算符,它实际上是两个不同的运算符,具体取决于上下文。在列表上下文中,它返回从左值到右值计数(向上)的值列表。如果左侧值大于正确值,则返回空列表。
当代码不起作用时,将其分解以查看发生了什么。例如,您可以尝试使用范围运算符来查看它产生的内容:
my @indices = 1 .. -5;
print "Indices are [@indices]\n";
当你得到一个空列表并意识到有些事情你不明白时,请检查文档中是否有你要做的事情来检查它是否正在做你认为应该做的事情。 :)