Perl:数组引用的负范围索引
Perl: Negative range indexing of array reference
我有一个数组引用,我想将数组的最后两个元素切片。我发现使用 -2..-1
会起作用。我使用的是以下语法:
subroutine($var->[-2..-1]);
这给了我以下错误:
Use of uninitialized value $. in range (or flip)
Argument "" isn't numeric in array element
我将线路更改为这个并且有效:
subroutine(@$var[-2..-1]);
我不明白为什么第二种方法有效而第一种方法无效。我认为使用数组运算符与使用 @
取消引用是一样的。箭头运算符的上下文是否有歧义?
->
是取消引用运算符。 $aref->[$i]
之于 $aref 就像 $arr[$i]
之于 @arr
。要从数组中获取切片,您需要更改印记:@arr[$i, $j]
。它与解引用类似,但不是更改印记,而是首先解引用引用,然后对其进行切片:
@{ $aref }[$i, $j]
可以缩短为@$aref[$i, $j]
。
因此 ->
运算符只能用于数组和散列引用的单个值。切片需要 @{}
。
我有一个数组引用,我想将数组的最后两个元素切片。我发现使用 -2..-1
会起作用。我使用的是以下语法:
subroutine($var->[-2..-1]);
这给了我以下错误:
Use of uninitialized value $. in range (or flip)
Argument "" isn't numeric in array element
我将线路更改为这个并且有效:
subroutine(@$var[-2..-1]);
我不明白为什么第二种方法有效而第一种方法无效。我认为使用数组运算符与使用 @
取消引用是一样的。箭头运算符的上下文是否有歧义?
->
是取消引用运算符。 $aref->[$i]
之于 $aref 就像 $arr[$i]
之于 @arr
。要从数组中获取切片,您需要更改印记:@arr[$i, $j]
。它与解引用类似,但不是更改印记,而是首先解引用引用,然后对其进行切片:
@{ $aref }[$i, $j]
可以缩短为@$aref[$i, $j]
。
因此 ->
运算符只能用于数组和散列引用的单个值。切片需要 @{}
。