为什么perl autovivification不起作用 - > @ *但是 - > @ [0]呢?

时间:2017-11-03 16:22:04

标签: perl autovivification

我可以通过切片得到值:

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

为什么我不能写?

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

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

  

不能将未定义的值用作......

的ARRAY参考

1 个答案:

答案 0 :(得分:5)

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

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

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