我有一些这样的代码:
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
%hJobT = map { $_ => 1 } %hJobT;
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
当我运行程序并打印我得到的结果时:
key office - 1
key recon - 1
key office - 1
key 1 - 1
key recon - 1
前两个结果来自第一个打印语句并且是预期的。
key 1 - 1
部分不是预期的。
为了澄清 - 代码处于循环中,随着它的迭代,键值在某些条件下会增加。出于测试目的,我在循环末尾放置了一个退出语句,因此它只显示第一次迭代结果,因此它们是“1”。 (只是这样看起来我似乎没有毫无意义地将 1 映射到 1。)关于为什么我得到 1-1 映射的任何想法?
最佳答案
散列是一个偶值列表。因此,在列表上下文中使用它时,您将获得所有这些键和值:
@list = qw(a b);
%hash = @list; # valid!
@list = %hash; # valid, but bad style. And the ordering may change
因此,当您将散列用作 map
的参数时,您创建了以下列表:
(
office => 1,
1 => 1,
recon => 1,
1 => 1
)
因为 map
看见了
("office", 1, "recon", 1)
因为它是列表参数。
关于perl - 为什么将 '1' 映射到 perl 中的散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748048/