【问题标题】:Type of argument to keys on reference must be unblessed hashref or arrayref引用键的参数类型必须是 unblessed hashref 或 arrayref
【发布时间】:2013-06-13 05:58:00
【问题描述】:
    if((scalar keys ($this->{'libraries'}->{$y}->{'cellHash'})) == 0){

这是我得到“引用键的参数类型必须是 unblessed hashref 或 arrayref”错误的行。你能帮我解决这个问题吗? 出于明显的原因,我没有发布代码。

【问题讨论】:

  • 您可能无法“出于明显的原因”发布真实代码,但是一些示例、可运行的虚拟代码如何演示您遇到的问题,而不暴露您真实的完整上下文代码?
  • @Dave Sherohman,一般来说建议不错,但问题已得到解释,并在您发表评论前两小时提出了解决方案。您可以通过在 OP 的代码前面加上:$y='y'; $this->{'libraries'}->{$y}->{'cellHash'} = bless({}); 来复制问题。请注意,您必须使用 5.14 或更高版本才能获取 OP 得到的错误。

标签: perl hashref arrayref


【解决方案1】:

keys 获取引用的新能力被设计破坏了。 Perl 的开发团队无法弄清楚它应该如何处理一些引用,所以它只适用于一些引用。因此,keys 接受引用的能力被记录为experimental。无法解决此问题,此“功能”已在 5.24 中删除。您不应该使用它,因为当您升级 perl 时,您的代码将停止工作。

您遇到了keys 在给出参考时不起作用的情况。改为提供散列或数组。在这种情况下,您可能想要

keys(%{ $this->{'libraries'}->{$y}->{'cellHash'} })

整个事情可以这样写:

if (!keys(%{ $this->{libraries}{$y}{cellHash} })) { ... }

【讨论】:

    【解决方案2】:

    %{$this->{'libraries'}->{$y}->{'cellHash'}} 。我错过了花括号和 % 。

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多