Perl - 哈希表和foreach语句

时间:2014-08-01 21:23:59

标签: perl

我对perl哈希感到有些困惑。

我知道你可以通过调用:

创建一个哈希
my %hashTable;

$hashTable("Key") = "Value"

稍后,如果要检索该值,可以执行

print $hashTable("Key")

然而,我对此for loop

感到困惑
foreach (keys %{$hashTable{"key"}})
{
    print $_
}

没有%{$ hashTable {" key"}},它看起来会打印出每个键,但是如果你在哈希表前做一个%会怎么样?

我尝试测试这个功能,给它一个名为" key"的键,它会给我一个错误:不能使用字符串("键")作为哈希引用。是否与多维哈希表有关?

2 个答案:

答案 0 :(得分:4)

发生的事情是您有一个名为%hashTable的哈希值。它的值为key,其值为另一个哈希表

所以代码:

foreach (keys %{$hashTable{"key"}})
{
    print $_
}

循环遍历第二个哈希,并打印出它包含的密钥。

以下是使用the documentation link提供的Miller的示例:

#!/usr/bin/perl

use strict;
use warnings;

my %HoH = (
    flintstones => {
        lead => "fred",
        pal => "barney",
    },
    jetsons => {
        lead => "george",
        wife => "jane",
        "his boy" => "elroy",
    },
    simpsons => {
        lead => "homer",
        wife => "marge",
        kid => "bart",
    },
);

foreach (keys %{$HoH{"flintstones"}})
{
    print $_."\n";
}

这有输出:

lead
pal

答案 1 :(得分:1)

想象一下您的hashTable

key1:           <-+
    value1        |
key2:             |
    value2        += this is your hashTable, with 3x key/value
key3:             |
    value3      <-+

现在更改keyN的值 - 因此,它不会包含标量值,而是包含另一个哈希值,例如:

key1:
    subkey1a: subval1a      <-+ this "HASH" is the value for the "key1".
    subkey1b: subval1b      <-|
key2:
    subkey2a: subval2a
key3:
    subkey3a: subval3a
    subkey3b: subval3b
    subkey3c: subval3c