Как я могу сохранить XML :: Simple to Hashes? XML изменен, поэтому нельзя использовать один атрибут для использования - PullRequest
0 голосов
/ 19 декабря 2010

У меня есть дамп из Data :: Dumper при использовании XML :: Simple , например:

$VAR1 = {
    'web' => {
        'cmd' => {'sw_package' => ['test_zipfs', 'test_ini']},
        'bsp' => {
            'dir'      => '.',
            'type'     => 'uc',
            'dir'      => 'soft/web/bsp',
            'test_ini' => 'lan'
        },
    },
    'world' => {
        'cmd' => {'undef' => 'undef'},
        'bsp' => {
            'dir'  => '.',
            'type' => 'hale',
            'dir'  => 'soft/hel/bp'
        },
    },
};

Я хочу скопировать {web} -> {cmd}хеш и то же самое для bsp.Я знаю, может получить доступ к последней стадии элементов {web} -> {bsp} -> {dir}.Но XML слепой, что означает, что я не буду точно знать, какие элементы у него есть.Поэтому я хочу только скопировать и сохранить хэш.

Я пытался:

my $cmd = Dumper($data -> {web} -> {cmd});
my %cmd_hash = %$cmd;

Но когда используется цикл через новый хэш %cmd_hash, ничего не происходит, он ничего не печатает.

1 Ответ

4 голосов
/ 19 декабря 2010

Если я правильно понимаю, вы хотите сделать глубокую копию частей хэша. Есть много способов сделать это; я предпочитаю модуль Clone.

use Clone qw(clone);
my $cmd_copy = clone($data->{web}->{cmd});
my $bsp_copy = clone($data->{web}->{bsp});

То, что вы делаете, не работает, потому что Dumper создает строку, которую вы затем пытаетесь использовать в качестве ссылки на хеш. Если у вас включен use strict 'refs', вы получите предупреждение типа Can't use string ("cmd") as a HASH ref, когда попытаетесь разыменовать его.

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