Постоянное хранилище данных Perl с использованием Data::Dumper
-
22-09-2019 - |
Вопрос
Я пытался разобраться в этом слишком долго сегодня вечером.Я загуглил это до смерти, и ни один из примеров или мои хаки с примерами не помогают это сделать.Кажется, что это должно быть довольно просто, но я просто не могу этого понять.Вот этот код:
#!/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 это говорит обо всем, кроме сервера базы данных.