如何打印Perl中最后一个数组元素的第一个到第五个?

the*_*ame 23 perl range

我正在运行以下代码,我试图@rainbow通过数组中的第五个元素来打印数组中的第一个元素@rainbow.此代码适用于数组边界内的任何正索引,但不适用于负数:

@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
Run Code Online (Sandbox Code Playgroud)

Cha*_*ens 39

你要

my @slice = @rainbow[0 .. $#rainbow - 5];
Run Code Online (Sandbox Code Playgroud)

要小心,1是第二个元素,而不是第一个元素.

  • 如果有人需要查询$#array意味着http://stackoverflow.com/questions/8618858/how-do-dollar-and-number-sign-together-work-in-perl (3认同)

mar*_*ton 18

..操作者形成了一个范围从左侧向右值-如果右边是大于或等于左侧.此外,在Perl中,数组索引从零开始.

这个怎么样?

@slice = @rainbow[0..$#rainbow-5];
Run Code Online (Sandbox Code Playgroud)

$#array为您提供数组中最后一个元素的索引.


bri*_*foy 6

范围运算符的前两个句子中,记录在perlop中:

二进制".."是范围运算符,它实际上是两个不同的运算符,具体取决于上下文.在列表上下文中,它返回从左值到右值计数(向上)的值列表.如果左侧值大于右侧值,则返回空列表.

当代码不起作用时,将其分解以查看发生了什么.例如,您可以尝试使用范围运算符来查看它生成的内容:

 my @indices = 1 .. -5;
 print "Indices are [@indices]\n";
Run Code Online (Sandbox Code Playgroud)

当你得到一个空列表,并意识到有些事情你不明白时,请查看文档,了解你要做的任何事情,以检查它是否正在做你认为它应该做的事情.:)