我正在运行以下代码,我试图@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是第二个元素,而不是第一个元素.
mar*_*ton 18
的..操作者形成了一个范围从左侧向右值-如果右边是大于或等于左侧.此外,在Perl中,数组索引从零开始.
这个怎么样?
@slice = @rainbow[0..$#rainbow-5];
Run Code Online (Sandbox Code Playgroud)
$#array为您提供数组中最后一个元素的索引.
二进制".."是范围运算符,它实际上是两个不同的运算符,具体取决于上下文.在列表上下文中,它返回从左值到右值计数(向上)的值列表.如果左侧值大于右侧值,则返回空列表.
当代码不起作用时,将其分解以查看发生了什么.例如,您可以尝试使用范围运算符来查看它生成的内容:
my @indices = 1 .. -5;
print "Indices are [@indices]\n";
Run Code Online (Sandbox Code Playgroud)
当你得到一个空列表,并意识到有些事情你不明白时,请查看文档,了解你要做的任何事情,以检查它是否正在做你认为它应该做的事情.:)