繁体   English   中英

在 perl 中将哈希推入数组,结果无法理解

[英]push hash onto array in perl, result defies understanding

为什么这..

my @menu;

my %el1 = ("element1" => "hello");
push @menu, \%el1;

my %el2 = ("element2" => "world");
push @menu, \%el2;

print to_json({"menu", @menu});

生产这个..

{
    "menu": {
        "element1": "hello"
    },
    "HASH(0x18e2280)": null
}

而不是这个..

{
    "menu": {
        "element1": "hello",
        "element2": "world"
    }
}

您已将两个哈希引用推送到@menu 所以当你运行这段代码时:

print to_json({"menu", @menu});

就好像你跑了一样:

print to_json({ "menu", \%el1, \%el2 });

{ ... }之间的位被解释为散列,因此第一项和第三项被视为散列键,第二项被视为值。 所以你会得到你看到的输出。 (并且,正如评论中指出的那样,您会在use warningsuse warnings ,因为第二个键没有关联的值)。

我认为你想写的是:

print to_json({ "menu", \@menu });

但即使这样也不对。 您将获得以下信息:

{
    "menu":[{
        "element1":"hello"
    },{
        "element2":"world"
    }]
}

您添加到数组中的两个散列仍然是完全独立的。

但你真正想要的是一个单一的哈希。 所以创建它。

#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Data::Dumper;

my @menu;

my %el1 = (
    "element1" => "hello",
    "element2" => "world",
);

print to_json({"menu", \%el1});

如果传递对数组的引用,结果会更清晰:

print to_json({"menu", \@menu});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM