我正在运行以下代码,并试图通过@rainbow
阵列中倒数第五个元素打印@rainbow
阵列中的第一个元素。此代码对数组的边界内任何积极的指标,而不是消极的:如何在Perl中打印最后一个数组元素的第一个到第五个元素?
@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
我正在运行以下代码,并试图通过@rainbow
阵列中倒数第五个元素打印@rainbow
阵列中的第一个元素。此代码对数组的边界内任何积极的指标,而不是消极的:如何在Perl中打印最后一个数组元素的第一个到第五个元素?
@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
你想
my @slice = @rainbow[0 .. $#rainbow - 5];
注意,1是第二个元素,而不是第一个。
的..
操作形成从左至右价值range - 如果权大于或等于剩下。另外,在Perl中,数组索引从零开始。
这个怎么样?
@slice = @rainbow[0..$#rainbow-5];
$#array
给出了数组中最后一个元素的索引。
从开头两句为range operator,在perlop记载:
二进制“”是的范围内操作,这是根据上下文实际上是两个不同的运营商。在列表上下文中,它返回从左值到右值计数(由1开始)的值列表。如果左侧值大于右侧值,则返回空列表。
当代码不起作用时,分解它以查看发生了什么。举例来说,你会尝试的范围内操作,看看它产生:
my @indices = 1 .. -5;
print "Indices are [@indices]\n";
当你有一个空的列表,并意识到有一些事情,你不明白,检查无论你是文档试图去检查它是否在做你认为应该做的事情。 :)
万一任何人需要查找什么$#数组意味着http://stackoverflow.com/questions/8618858/how-do-dollar-and-number-sign-together-work-in-perl – 2015-02-19 01:03:04
谢谢@Chas,它为我工作 – 2016-02-15 06:17:30