2014-10-17 76 views
2

我对perl非常陌生,因此我有权维护一个网页。我发现了一个我不知道如何解决的错误。引用键参数的类型必须是未经过调整的

perl脚本在以下代码上停止。

my @failedTests = (sort(keys ($TestResultsData{$currPlatform}{$currDate}{failedtests}))); 
while (@failedTests) 
{ 
... 

的错误信息是:

Type of argument to keys on reference must be unblessed hashref or arrayref. 

可以在该行代码重新编写,以便它的工作原理?

+0

显示您“TestResultsData”变量的声明。 – toolic 2014-10-17 13:32:27

+0

其定义如下: 'my%TestResultsData;' 函数外部 – AlexN 2014-10-17 13:51:57

回答

3

$TestResultsData{$currPlatform}{$currDate}{failedtests}的值是一个有福的hashref。 keys怯懦拒绝在受祝福的hashrefs上运行,因为它会打破封装和重载的错觉。

(Perl中的旧版本将不会接受一个hashref在所有 - 你需要传递一个正确的哈希值。)

尝试手动使用提领该hashref到一个哈希:

my @failedtests = sort keys %{ $TestResultsData{$currPlatform}{$currDate}{failedtests} }; 
+0

这个工作! ...时间去做更多关于哈希的阅读。谢谢! – AlexN 2014-10-17 13:56:49

+0

另外,因为这意味着对象可能会覆盖'@ {}'或'%{}'。 – ikegami 2014-10-17 14:24:28

+3

请注意'keys $ ref'是实验性的,所以'keys%{$ ref}'是个好主意。 – ikegami 2014-10-17 14:25:10

相关问题