引用键的参数类型必须是非散列的hashref或arrayref

Rah*_*ddy 4 perl hashref arrayref

    if((scalar keys ($this->{'libraries'}->{$y}->{'cellHash'})) == 0){
Run Code Online (Sandbox Code Playgroud)

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

ike*_*ami 8

采用keys参考的新能力被设计破坏了.Perl的开发团队无法弄清楚它应该如何与一些引用一起工作,因此它仅适用于某些引用.因此,keys接受参考的能力被证明是实验性的.无法解决此问题,此"功能"已被删除5.24.您不应该使用它,因为升级时代码将停止工作perl.

你已经找到了那些keys在给出参考时不起作用的情况.改为提供哈希或数组.在这种情况下,您可能想要

keys(%{ $this->{'libraries'}->{$y}->{'cellHash'} })
Run Code Online (Sandbox Code Playgroud)

整件事可以写成如下:

if (!keys(%{ $this->{libraries}{$y}{cellHash} })) { ... }
Run Code Online (Sandbox Code Playgroud)