什么版本的Perl支持$#$sigil?

什么版本的Perl支持$#$sigil?,perl,range,Perl,Range,我发现这就是如何使用arrayref的范围: @$aref[2..$#$aref] 因此,情况是我无法访问所有这些不同的perl环境(对其进行测试),但如果最终将在所有perl环境上编译的代码未能编译,我就会遇到麻烦 Perl版本:5.16.2、5.10.1和5.8.8 有人知道吗 在不聪明的情况下,用谷歌搜索perl复杂的语法是不可能的。我不够聪明,不能为此做这件事 还有,你知道吗@$arr_ref[-3..$#$arr_ref]提供最后三个元素,然后将整个数组追加到它。这显然是[-3..5

我发现这就是如何使用arrayref的范围:

@$aref[2..$#$aref]
因此,情况是我无法访问所有这些不同的perl环境(对其进行测试),但如果最终将在所有perl环境上编译的代码未能编译,我就会遇到麻烦

Perl版本:
5.16.2
5.10.1
5.8.8

有人知道吗

在不聪明的情况下,用谷歌搜索perl复杂的语法是不可能的。我不够聪明,不能为此做这件事

还有,你知道吗
@$arr_ref[-3..$#$arr_ref]
提供最后三个元素,然后将整个数组追加到它。这显然是
[-3..5]
的意思:将元素
-3
(=3)赋给
5
,然后通过
5
追加
0


这是因为除非两个范围索引都是同一个符号,否则perl不会以合理的方式处理它:要得到一个从最后到结尾包含第五个的切片,只需使用
@arr[-5..-1]

这个符号实际上并不特别;这就是数组切片、arrayref、
$#
符号的工作方式,您可以直接将它们放在一起。但要回答您的问题,是的,它在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>
$perl-v|grep.|总目-1
这是为Linux-2.6c2.5-x86_64-64int构建的perl v5.8.8
$perl-e'$aref=[1..5];打印“\n”foreach@$aref[2..$#$aref]”
(甚至在更早的版本中)。

$#array
返回数组的最后一个索引
@array
。类似地,
$#{$aref}
返回由
$aref
引用的数组的最后一个索引。这可以缩短为
$#$aref

$x$y
是范围运算符。它返回从
$x
$y
的数字,包括在内。(它也适用于某些字符串。)例如,
-3。。5
表示
-3、-2、-1、0、1、2、3、4、5

@array[…]
是一个数组切片。它返回由索引表达式指定的数组
@array
的元素。类似地,
@{$aref}[…]
返回由
$aref
引用的数组元素。这可以缩短为
@$aref[…]

所有这些特征都早于5.8.8。它们甚至早于5.6.0

$ perl -v | grep 'This is'
This is perl, v5.8.8 built for i386-linux-thread-multi

$ perl -le'@array = qw( a b c d e ); print @array[2..$#array]'
cde

$ perl -le'$aref = [qw( a b c d e )]; print @{ $aref }[2..$#{ $aref }]'
cde

$ perl -le'$aref = [qw( a b c d e )]; print @$aref[2..$#$aref]'
cde

请注意,Perl开发人员目前正在讨论更强大的切片表达式

现在,如果不使用临时数组,就无法轻松完成以下操作

sub f { ... }
my @a = f();
my @b = @a[2..$#a];
自从5.x行出现以来,
$#
语法(用于获取数组中最后一个元素的索引)一直是Perl语法的一部分。实际上,
$#array
语法至少在Perl 4出现过,但是引用(因此,
$#$aref
语法)直到Perl 5才出现


虽然它不是简单的可搜索的,但如果您想知道Perl中何时出现更改,则需要查看每个版本的文档。

这是明智的-
-3。。5是系列-3,-2,-1,0,1。。。5,你要的是这些指数的一部分。您正好有一个六元素数组,因此索引-3处的元素恰好与索引3处的元素相同。现在我知道范围本身就是一件事情,并且在数组切片之外也有其用途,这就更有意义了。我喜欢Python的做法。转动
90度。