如何将两个表达式写成一个?

时间:2018-01-23 14:52:48

标签: perl

我可以写下这两个:

$var =  tied $$var;  # History=HASH(0x192a540)
$var->{ desc };      # object description info

用一个表达式:

${tied $$var}->{ desc };

我收到错误:

Not a SCALAR reference at ...

1 个答案:

答案 0 :(得分:5)

语法SOMETHING->{key}尝试在引用SOMETHING中执行哈希查找。在这里,您的SOMETHING${...},即标量解除引用

相反,你想要

  • 正常括号:(...)->{key}
  • 哈希访问,没有额外的解除引用级别:${...}{key}

->解引用运算符只是两个下标之间的可选。即$foo{bar}[42]$foo{bar}->[42]是等效的,并从%foo哈希值中访问值。但是$foo->{bar}[42]完全不同:它访问$foo哈希引用中的值。

语法%{SOMETHING}{key}不正确,因为它将SOMETHING取消引用为哈希,然后访问条目。但是,用于访问哈希%SOMETHING中的条目的语法是$SOMETHING{key},而不是%SOMETHING{key}。散列的sigil %变为标量符号$,因为您从散列中获得标量条目。这已知令人困惑,并已在Perl 6中修复。