【问题标题】:Perl - No such pseudo-hash fieldPerl - 没有这样的伪散列字段
【发布时间】:2015-03-29 10:31:42
【问题描述】:

我是一个 Perl 新手,并试图理解一些代码。我得到错误

No such pseudo-hash field "value"

在线上

$stringObj->{'value'};

这特别难以诊断或调试,因为它会根据系统神奇地开始工作。在我使用的系统中,错误不会发生。但是,所有版本都运行某种形式的 Perl 5.8。

我知道伪散列有点被弃用,我没有兴趣继续使用它们——我只需要这段代码就可以工作。

这是我的问题:

(1) 如果伪散列将散列视为数组,如何正确识别数组并将其视为数组?

(2) 为什么这个bug看起来是随机出现和消失的?

在我的机器上,$stringObj 可能如下所示:

$VAR1 = bless( { '_verify_isOK' => 1, 'name' => 'My Text', 'type' => 'StringEntity'}, 'MyObject' );

有时它也有一个“价值”。

【问题讨论】:

  • 你能提供更多的上下文吗? $stringObj 是什么?
  • @JimDavis 在我可以重现的所有情况下,$stringObj 都可以被视为哈希。显然这不是它在其他一些系统上所采用的形式。
  • 什么设置了 $stringObj?

标签: arrays perl hash


【解决方案1】:

你在 perl 中使用了一个伪散列。如果您尝试使用不存在的键获取值,则会收到错误消息。

例子:

$stringObj = [ { "Billy" => 1, "Tom" => 2}, 22, 33 ]

print $stringObj->{'Billy'} 

22

print $stringObj->{'Steve'} 

No such pseudo-hash field "Steve"

不要使用 Pseudeohashes。自 5.8 起已弃用它们。

书上的详细描述:Pro Perl > Pseudohashes

https://books.google.de/books?id=1bbjLxkBLaMC&pg=PA130&lpg=PA130&dq=%22No+such+pseudo-hash+field%22+perl&source=bl&ots=GhbPNrWKGx&sig=D-UWQLMyU35ZeM1lGkIZEwkC0XE&hl=de&sa=X&ei=FYrLVOWnAuvW7Qbpp4GgCg&ved=0CG0Q6AEwCQ#v=onepage&q=%22No%20such%20pseudo-hash%20field%22%20perl&f=false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多