为什么 perl autovivification 不适用于 ->@* 但 ->@[0] 可以?

Why perl autovivification does not work for ->@* but ->@[0] does?

我可能会通过切片获取值:

($x, $y, $z) =  $hash->{ key }->@[0,1,2]

为什么我写不出来?

($x, $y, $z) =  $hash->{ key }->@*

对于哈希中未定义 key 的情况下的第二个表达式,我得到错误:

Can't use an undefined value as an ARRAY reference at ...

切片为您指定的每个索引获取左值(可写标量);列表上下文数组取消引用不会生成任何左值。一般规则是 autovivification 仅适用于左值.

例如 ->@* 在这种情况下将自动激活:

push $hash->{ key }->@*, 1;