Perl 使用哈希访问哈希

Perl 使用哈希访问哈希,perl,hash,Perl,Hash,我有这道菜 我只想迭代“0”的值 $VAR1 = { '1' => { '192.168.1.1' => '192.168.1.38' }, '0' => { '192.168.32.6' => '192.168.32.43' } }; 我访问它的唯一方法是为每个$key(key(%myhash))创建两个循环: 我可以使用: foreach my $key (keys(%myhash{0})) ## does not work 或者

我有这道菜

我只想迭代“0”的值

$VAR1 = {
  '1' => {
    '192.168.1.1' => '192.168.1.38'
  },
  '0' => {
    '192.168.32.6' => '192.168.32.43'
  }
};
我访问它的唯一方法是为每个$key(key(%myhash))创建两个
循环:

我可以使用:

foreach my $key (keys(%myhash{0}))  ## does not work
或者以某种方式直接访问这些值


首先,如果使用连续整数作为散列的键,那么很可能应该使用数组

与键
0
相对应的散列值是
$dhcps{0}
,因为它是标量值<代码>%dhcpoffers{0}
只是一个语法错误

你需要

for my $key (keys %{ $dhcpoffers{0} }) { ... }
或者,如果你愿意的话

my $offer_0 = $dhcpoffers{0};
for my $key (keys %$offer_0) { ... }
由于Perl 5的第14版,
键将接受哈希引用,因此您可以编写更干净的

for my $key (keys $dhcpoffers{0}) { ... }

您是否已阅读并?是否可以插入您所使用的嵌套(?)
foreach
循环的代码?这将有助于说明和对比这里讨论的两种不同的访问方法:即
5.14
和更高版本可以直接引用,而早期版本需要解引用步骤(因此需要双循环)。酷!虽然我有5.16.3版本,但我无法得到
来按你说的做。你能稍微扩展/改进你的答案来说明吗?@G.Cito:对不起,我的最后一行代码中有一个输入错误。现在就试试。谢谢。事实证明,大约5分钟前我自己就明白了这一点,并打算发表评论:——)+1票赞成你的快速反应!