我在这里看到类似的问题,但这些问题都没有具体回答我自己的问题。
我正在尝试以编程方式创建哈希哈希。我的问题代码如下:
my %this_hash = ();
if ($user_hash{$uuid})
{
%this_hash = $user_hash{$uuid};
}
$this_hash{$action} = 1;
$user_hash{$uuid} = %this_hash;
my %test_hash = $user_hash{$uuid};
my $hello_dumper = Dumper \%this_hash;
根据我的输出,$ this_hash被正确分配但是
$user_hash{$uuid} = %this_hash
在调试器中显示值为1/8;不确定他的意思。我也收到一个警告:“哈希分配中奇数个元素......”
答案 0 :(得分:12)
任何时候你写
%anything = $anything
你做错了什么。几乎在你写的任何时候
$anything = %anything
你做错了什么。这包括$anything
是数组还是哈希访问(即$array[$index]
或$hash{$key}
)。存储在数组和散列中的值始终是标量,而数组和散列本身不是标量。因此,当您想要在散列中存储散列时,可以将引用存储到它:$hash{$key} = \%another_hash
。当您想要访问存储在哈希中的哈希引用的哈希时,您可以取消引用:%another_hash = %{ $hash{$key} }
或$hashref = $hash{$key}; $value = $hashref->{ $another_key }
或$value = $hash{$key}{$another_key}
。
为了快速了解参考资料,我强烈建议您阅读Perl References Tutorial和Perl Data Structures Cookbook。
答案 1 :(得分:5)
这不是真正的“散列哈希”;它是“哈希引用的哈希”。
尝试:
$user_hash{$uuid} = \%this_hash;