我有一些像这样的代码:
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
%hJobT = map { $_ => 1 } %hJobT;
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
Run Code Online (Sandbox Code Playgroud)
当我运行程序并打印结果时,我得到:
key office - 1
key recon - 1
key office - 1
key 1 - 1
key recon - 1
Run Code Online (Sandbox Code Playgroud)
前两个结果来自第一个print语句并且是预期的.
这key 1 - 1部分不是预期的.
为了澄清 - 代码处于一个循环中,当它迭代时,键值在某些条件下递增.出于测试目的,我在循环结束处放置了一个exit语句,因此它只显示第一个迭代结果,因此乳清它们为'1'.(就这样我似乎没有毫无意义地将1s映射到1s.)有关为什么我得到1-1映射的任何想法?
amo*_*mon 12
哈希是偶数值列表.因此,在列表上下文中使用它时,您将获得所有这些键和值:
@list = qw(a b);
%hash = @list; # valid!
@list = %hash; # valid, but bad style. And the ordering may change
Run Code Online (Sandbox Code Playgroud)
因此,当您使用散列作为arg时map,您创建了以下列表:
(
office => 1,
1 => 1,
recon => 1,
1 => 1
)
Run Code Online (Sandbox Code Playgroud)
因为map锯
("office", 1, "recon", 1)
Run Code Online (Sandbox Code Playgroud)
因为它是列表参数.