Постоянное хранилище данных Perl с использованием Data::Dumper

StackOverflow https://stackoverflow.com/questions/2521142

Вопрос

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

#!/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, чего я и пытаюсь достичь.

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

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

Это было полезно?

Решение

У всех нас бывают такие вечера!Попробуй:

$complex_variable = do $MEMORY || die "Bad data";

Другие советы

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

Во-вторых, я не пробовал это, но мне не кажется, что вы сохраняете hashref, когда вы "выполняете $ MEMORY", оценка закомментирована.Попробуй:

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

Мне, как правило, нравится ДБМ:: Глубокий для этого.Тем не менее, у меня есть полная глава о "Легковесной настойчивости" в Освоение Perl это говорит обо всем, кроме сервера базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top