【问题标题】:Why perl autovivification does not work for ->@* but ->@[0] does?为什么 perl autovivification 不适用于 ->@* 但 ->@[0] 可以?
【发布时间】:2018-04-16 10:48:39
【问题描述】:

我可以通过切片获得值:

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

为什么我不能写?

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

对于第二个表达式,如果 key 未在哈希中定义,我会收到错误:

不能在 ... 处使用未定义的值作为 ARRAY 引用

【问题讨论】:

    标签: perl autovivification


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 2021-06-18
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多