在Perl中使用结构和哈希

时间:2018-12-03 17:34:46

标签: perl

在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'
    };

2 个答案:

答案 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},
};