什么版本的Perl支持$#$sigil?
我发现这就是如何使用arrayref的范围:什么版本的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
@$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度。