我发现这是你使用带有arrayref的范围的方法:
@$aref[2..$#$aref]
Run Code Online (Sandbox Code Playgroud)
所以,情况是我无法访问所有这些不同的perl环境(以测试它),但如果最终将在所有这些环境上编译的代码无法编译,我就会陷入困境.
Perl的版本:5.16.2,5.10.1,和5.8.8
有人知道吗?
在没有聪明的情况下,谷歌的perl语法复杂性在物理上是不可能的.我不够聪明,为此做到这一点.
PS你知道吗?@$arr_ref[-3..$#$arr_ref]给出最后三个元素,然后将整个数组附加到它上面.这显然是什么[-3..5]意思:给元素-3(= 3) 5,然后追加0通5.
这是因为perl没有以合理的方式处理它,除非两个范围索引都是相同的符号:要获得包含从最后到结尾的第5个的切片,你只需使用@arr[-5..-1].
这种表示法实际上并不特殊; 它就是数组切片,数组参数..和$#符号的工作原理,并且您可以直接将它们放在一起.但回答你的问题,是的,它适用于Perl 5.8.8:
$ perl -v | grep . | head -1
This is perl, v5.8.8 built for Linux-2.6c2.5-x86_64-64int
$ perl -e '$aref = [1 .. 5]; print "<$_>\n" foreach @$aref[2..$#$aref]'
<3>
<4>
<5>
Run Code Online (Sandbox Code Playgroud)
(甚至在更早的版本中).