Постоянное хранение данных в Perl с использованием Data :: Dumper - PullRequest
3 голосов
/ 26 марта 2010

Я пытался выяснить это на пути к длинной ночи. Я погуглил его до смерти, и ни один из примеров или мои взломы примеров не сделали этого. Кажется, это должно быть довольно легко, но я просто не могу этого понять. Вот код:

#!/usr/bin/perl -w
use strict;
use Data::Dumper;

my $complex_variable = {};
my $MEMORY = "$ENV{HOME}/data/memory-file";

$complex_variable->{ 'key' } = 'value';
$complex_variable->{ 'key1' } = 'value1';
$complex_variable->{ 'key2' } = 'value2';
$complex_variable->{ 'key3' } = 'value3';

print Dumper($complex_variable)."TEST001\n";

open M, ">$MEMORY" or die;
print M Data::Dumper->Dump([$complex_variable], ['$complex_variable']);
close M;

$complex_variable = {};
print Dumper($complex_variable)."TEST002\n";

# Then later to restore the value, it's simply:
do $MEMORY;
#eval $MEMORY;

print Dumper($complex_variable)."TEST003\n";   

А вот мой вывод:

$VAR1 = {
         'key2' => 'value2',
         'key1' => 'value1',
         'key3' => 'value3',
         'key' => 'value'
       };
TEST001
$VAR1 = {};
TEST002
$VAR1 = {};
TEST003    

Все, что я читаю, говорит о том, что вывод TEST003 должен выглядеть идентично выводу TEST001, и это именно то, чего я пытаюсь достичь.

Что мне здесь не хватает? Должен ли я «делать» по-другому или вместо этого «оценивать», и если да, то как?

Спасибо за любую помощь ...

Ответы [ 3 ]

6 голосов
/ 26 марта 2010

Во-первых, я бы порекомендовал использовать Storable.pm вместо Data :: Dumper. У Storable есть методы замораживания и оттаивания, которые могут сохранять структуру данных в двоичном виде, не переводя их в текст и обратно.

Во-вторых, я не пробовал этого, но мне не кажется, что вы сохраняете хеш-код, когда вы «делаете $ MEMORY». Попробуйте:

$complex_variable = eval $MEMORY;
print Dumper($complex_variable)."TEST003\n";
5 голосов
/ 26 марта 2010

У всех нас есть эти вечера! Попробуйте:

$complex_variable = do $MEMORY || die "Bad data";
1 голос
/ 26 марта 2010

Мне нравится DBM :: Deep для этого. Тем не менее, у меня есть полная глава «Легкое постоянство» в Мастеринг Perl , в которой рассказывается обо всем, кроме сервера базы данных.

...