分配中的Perl'上下文'

Byu*_*Lee 4 arrays perl scalar list slice

作为Perl的新手,我只是不明白以下结果背后是什么样的哲学:

$cnt1 = @arr;           
# this gives the length of the array 'arr'
$cnt2 = @arr[ @indices_arr ];          
# this gives the last element of the @arr[ @indices_arr ];
Run Code Online (Sandbox Code Playgroud)

有人能解释两者之间的区别吗?

Thi*_*Not 5

来自perldoc perldata:

对标量的赋值评估标量上下文中的右侧...

和:

如果在标量上下文中计算数组,则返回数组的长度.

和:

标量上下文中的切片返回切片的最后一项.

@arr是一个数组; @arr[ @indices_arr ]是一个数组切片.


至于背后的哲学:列表和数组是Perl中不同的数据类型,具有不同的行为(不要被@切片中使用的sigil 抛出,切片是列表,而不是数组).请参阅Perl中的阵列与列表:有什么区别? 深入解释两者之间的差异.

  • 至于为何要评估它们的作用:获取数组的长度非常有用.我们会给你在标量方面,因为第一个或最后一个元素都已经微不足道获得(`一个``一个分别为[0]`$和[-1] $).//获取切片的长度(它与索引的数量相同)没有用.事实上,在标量上下文片并没有太大的意义,但这种情况下,需要处理,所以让我们使`@a [4]`行为一样`$ A [4]` (2认同)