2013-06-13 59 views
4
if((scalar keys ($this->{'libraries'}->{$y}->{'cellHash'})) == 0){ 

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

+2

您可能无法发布真正的代码“出于显而易见的原因”,但是如何处理一些示例,可运行的虚拟代码,这些代码可以显示您遇到的问题,而无需公开真实代码的完整上下文? –

+0

@Dave Sherohman,一般的好建议,但是问题已经解释了,并且在你的评论前两个小时提出了一个解决方案。您可以通过在OP的代码之前复制问题:'$ y ='y'; $ this - > {'libraries'} - > {$ y} - > {'cellHash'} = bless({});'。请注意,您必须使用5.14或更高版本来获取OP得到的错误。 – ikegami

回答

8

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

你碰到过这种情况,keys在给出参考时不起作用。改为提供散列或数组。在这种情况下,你可能想

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

整个事情可以写成如下:

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

%{$本 - > { '图书馆'} - > {$ Y} - > { 'cellHash'}}。我错过了花括号和%。

相关问题