我有一个哈希,为每个记录保存一个带有2个元素的匿名哈希:一个数组和一个哈希。我想用一个键列表初始化这个辅助哈希。
我知道当你使用普通哈希(不是ref)并同时使用键列表和值列表时,可以使用哈希切片。
我的代码就像这样
my %records;
my $key = "key1";
my @states = ( "state1", "state2", "state3" );
$records{$key} = {
numbers => [],
states => %{@states} #This is wrong !
};
编辑(标记为重复):此问题询问如何向匿名哈希添加多个键。
答案 0 :(得分:3)
令人费解的是,您只有哈希的密钥而没有值。此代码会将$records{$key}{states}
的每个元素的值设置为undef
my %records;
my $key = "key1";
my @states = ( "state1", "state2", "state3" );
$records{$key} = {
numbers => [],
states => { map { ( $_ => undef ) } @states },
};
但是,暂时构建适当的哈希并将其引用分配给数据结构会更清楚。我已将整个分配过程包含在自己的块中,以便我可以声明一个临时的词法哈希%states
{
my %states;
@states{@states} = ();
$records{$key} = {
numbers => [],
states => \%states,
};
}
但请注意,如果哈希元素根本不存在而不是使用未定义的值创建它们,通常会更好。没有必要像这样预先分配哈希的元素,只需像使用数组一样将其留空
$records{$key} = {
numbers => [],
states => {},
}