如何在哈希中插入哈希散列?

时间:2011-02-22 09:51:31

标签: arrays perl hash

我想从空哈希开始,然后在哈希中插入相同类型哈希的哈希值。

#!/usr/bin/perl

use strict;
use warnings;

my %h = {};

$h{"1"} => {
    a => -1,
    b => -1,
    c => [
    {
        d => -1,
        e => -1,
    },
    ],
};

然而,这给出了

Useless use of hash element in void context at ./hash.pl line 8.
Useless use of anonymous hash ({}) in void context at ./hash.pl line 8.
Reference found where even-sized list expected at ./hash.pl line 6.

这是我想要制作的数据库,我可以在其中插入$h{"1"}类的删除结构。

任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:9)

要初始化您使用%h = ()的哈希值 {}是空匿名哈希的reference。试试这个:

my %h = ();

$h{"1"} = {
    a => -1,
    b => -1,
    c => [{
        d => -1,
        e => -1,
    }],
};

答案 1 :(得分:3)

注意:引用总是标量,因为它们包含地址(整齐地思考的那种)

当你创建一个嵌套的数据结构时,请记住在perl中我们不必担心如何分配空间,分配多少空间。处理它自己的匿名存储非常简洁。

但是,请务必记住创建此类存储的拇指规则,

要创建匿名数组,请使用方括号而不是括号:

$ra = [ ];

要创建匿名哈希,请使用大括号而不是方括号:

$rh = { };

这就是全部。

现在,你写的是这样的,

my %h={};

您实际上是在创建一个哈希并使用一个标量初始化它。

这就是为什么你的程序抱怨这个,

只需删除该行并重写您的代码,

#!/usr/bin/perl

use strict;
use warnings;

my $h={"1" => {
            a => -1,
            b => -1,
            c => [
                 {
                   d => -1,
                   e => -1,
                 },
                 ],
              }
};

Perl会照顾其余的.. 享受Perl :):)