Pergunta

Eu tenho tentado descobrir isso por muito tempo hoje à noite. Eu pesquisei até a morte e nenhum dos exemplos ou meus hacks dos exemplos estão fazendo isso. Parece que isso deve ser muito fácil, mas eu simplesmente não consigo entender. Aqui está o código:

#!/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";   

E aqui está minha saída:

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

Tudo o que li diz que a saída Test003 deve parecer idêntica à saída do TEST001, que é exatamente o que estou tentando alcançar.

O que estou perdendo aqui? Devo ser "fazer" "ing de maneira diferente ou devo ser" avaliar "e, em caso afirmativo, como?

Obrigado por qualquer ajuda...

Foi útil?

Solução

Todos nós temos essas noites! Tentar:

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

Outras dicas

Primeiro, eu recomendaria usar o storable.pm em vez de dados :: dumper. O Storable possui métodos de congelamento e degelo, que podem preservar uma estrutura de dados em sua forma binária sem traduzi -lo e voltar do texto.

Segundo, eu não tentei isso, mas não me parece que você está armazenando o hashref quando "fazer $ memória", a avaliação é comentada. Tentar:

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

Eu tendem a gostar DBM :: Deep por esta. No entanto, tenho um capítulo completo sobre "persistência leve" em Dominar perl Isso fala sobre tudo o que está de acordo com um servidor de banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top