【问题标题】:Type of argument to keys on reference must be unblessed引用键的参数类型必须是 unblessed
【发布时间】:2014-12-13 02:18:35
【问题描述】:

我是 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.

可以重写那行代码以使其正常工作吗?

【问题讨论】:

  • 它在函数外定义为my %TestResultsData;

标签: perl hashref arrayref


【解决方案1】:

$TestResultsData{$currPlatform}{$currDate}{failedtests} 的值是一个祝福的 hashref。 keys cowardly 拒绝对祝福的 hashref 进行操作,因为它会破坏封装和重载的错觉。

(旧版本的 Perl 根本不接受 hashref - 你需要传递一个正确的哈希值。)

尝试使用以下方法手动将 hashref 解引用为哈希:

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

【讨论】:

  • 这成功了! ...是时候对哈希进行更多阅读了。谢谢!
  • 另外,因为这意味着该对象可能已被覆盖 @{}%{}
  • 请注意,keys $ref 是实验性的,所以keys %{ $ref } 是一个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2012-01-18
  • 1970-01-01
  • 2021-06-18
相关资源
最近更新 更多