我对perl哈希感到有些困惑。
我知道你可以通过调用:
创建一个哈希my %hashTable;
$hashTable("Key") = "Value"
稍后,如果要检索该值,可以执行
print $hashTable("Key")
然而,我对此for loop
感到困惑foreach (keys %{$hashTable{"key"}})
{
print $_
}
没有%{$ hashTable {" key"}},它看起来会打印出每个键,但是如果你在哈希表前做一个%会怎么样?
我尝试测试这个功能,给它一个名为" key"的键,它会给我一个错误:不能使用字符串("键")作为哈希引用。是否与多维哈希表有关?
答案 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