我可以通过切片得到值:
($x, $y, $z) = $hash->{ key }->@[0,1,2]
为什么我不能写?
($x, $y, $z) = $hash->{ key }->@*
对于在散列中未定义key
的情况下的第二个表达式,我得到错误:
不能将未定义的值用作......
的ARRAY参考
答案 0 :(得分:5)
切片为每个指定的索引获取左值(可写标量);列表上下文数组解除引用不会产生任何左值。一般规则是 autvivification仅适用于左值。
例如->@*
将在这种情况下自动生成:
push $hash->{ key }->@*, 1;