Как вставить хэш хэшей в хэш? - PullRequest
3 голосов
/ 22 февраля 2011

Я хотел бы начать с пустого хеша, а затем вставить хеш такого же типа в хеш.

#!/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 ]

9 голосов
/ 22 февраля 2011

Для инициализации хеша вы используете %h = ().
{} - это ссылка на пустой анонимный хеш.Попробуйте это:

my %h = ();

$h{"1"} = {
    a => -1,
    b => -1,
    c => [{
        d => -1,
        e => -1,
    }],
};
3 голосов
/ 22 февраля 2011

ПРИМЕЧАНИЕ: Ссылки всегда скалярные, так как содержат адрес (вроде бы аккуратно)

Когда вы создаете вложенную структуру данных, просто помните, что в 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 :):)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...