在Perl中考虑以下结构:(我们称之为声明A
)
my $json_struct = {
name => $name,
time => $time,
};
我有一个哈希%hash
,其中包含自定义字段(我不知道有多少个)。看起来像这样:
$VAR1 = {
'key2' => '123',
'key1' => 'abc',
'key3' => 'xwz'
};
我想遍历哈希键并将这些键插入结构,所以我认为我可以做这样的事情:
foreach my $key (keys %hash) {
push @{ $json_struct }, { $key => $hash{$key} };
}
我不确定它是否按预期工作。另外,有没有更清洁的方法?也许可以在声明A
的同时将其合并为一两行?
预期输出:(顺序无关紧要)
$VAR1 = {
'name' => $name,
'time' => $time,
'key2' => '123',
'key1' => 'abc',
'key3' => 'xwz'
};
答案 0 :(得分:1)
$json_struct
是一个哈希引用,但是@{ $json_struct }
在$json_struct
上执行 array 取消引用,因此行不通。
没有push
哈希运算符;您只需通过为新键分配值来插入新数据。对于您的结构,您只想说
foreach my $key (keys %hash) {
$json_struct->{$key} = $hash{$key};
}
现在,您可以也可以使用@{...}
运算符来指定hash slice,这可能就是您所想的。哈希片可用于同时对哈希的多个键进行操作。适用于该操作的语法是
@{$json_struct}{keys %hash} = values %hash;
答案 1 :(得分:1)
加入哈希的最简单方法是这样的:
my $foo = {
name => $name,
time => $time,
};
my $bar = {
'key2' => '123',
'key1' => 'abc',
'key3' => 'xwz'
};
my $combined = {
%{$foo},
%{$bar},
};