【问题标题】:Iterating through a HASH in perl在 perl 中遍历 HASH
【发布时间】:2016-03-26 11:22:06
【问题描述】:

我使用:print Dumper $decoded,其中$decoded 是 HASH 变量,我将其作为输出。

    $VAR1 = {
              'Case_345' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   },
              'Case_512' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   },
              'Case_534' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   },
              'Case_552' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   },
              'Case_578' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   },
              'Case_466' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   },
              'Case_754' => {
                                     'Notes' => 'test2',
                                     'Submit_Date' => '2015-11-21 00:53:22 UTC',
                                     'Last_Resolved_Date' => ''
                                   }
            };

这是我尝试用来输出一些值以测试遍历 HASH 的方法。

    foreach my $key ( keys %decoded )
    {
         print "key: $key, value: $decoded{$key}\n";
    }

它根本不遍历$decoded 变量。我是perl的新手,有人可以帮助我吗?如果它有帮助,我可以通过使用JSON::XS::decode_json($json_str) 转换字符串来得到它。谢谢。

【问题讨论】:

标签: json perl hash


【解决方案1】:

首先$decoded是一个标量变量,其中包含一个散列引用,与散列变量%decoded无关。要访问$decoded 引用的哈希,您必须取消引用它,%$decoded

必须始终use strictuse warnings 'all' 在您编写的每个 Perl 程序的顶部,尤其是在向其他人寻求帮助之前。这是一个简单的措施,在这种情况下,它会发现你使用了%decoded 而没有声明它

此外,您的散列的 是更多的散列引用,将它们打印出来会产生像这样不太有用的东西

key: Case_466, value: HASH(0xbf4840)
key: Case_534, value: HASH(0xc6dc00)
key: Case_552, value: HASH(0x280fce0)
key: Case_512, value: HASH(0xbf4930)
key: Case_345, value: HASH(0xd4c2f0)
key: Case_754, value: HASH(0x280fdd0)
key: Case_578, value: HASH(0x280fd58)

大概你想要每个哈希中所有字段的值?要访问给定键和对哈希的引用的哈希元素的值,您应该编写$hashref->{key},因此此代码将为您转储整个哈希

for my $key ( keys %$decoded ) {
  my $data = $decoded->{$key};
  print "key: $key, values:\n";
  for my $field ( qw/ Submit_Date Last_Resolved_Date Notes / ) {
    printf "    %-18s => %s\n", $field, $data->{$field};
  }
}

输出

key: Case_578, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2
key: Case_754, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2
key: Case_534, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2
key: Case_345, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2
key: Case_512, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2
key: Case_552, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2
key: Case_466, values:
    Submit_Date        => 2015-11-21 00:53:22 UTC
    Last_Resolved_Date => 
    Notes              => test2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2010-09-14
    • 2022-07-01
    相关资源
    最近更新 更多