Pregunta

he estado tratando de resolver esto de manera mucho esta noche. He buscado en Google a la muerte y ninguno de los ejemplos o mis hacks de los ejemplos son conseguir que se haga. Parece que esto debería ser bastante fácil, pero simplemente no puede conseguirlo. Aquí está el 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";   

Y aquí está mi salida:

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

Todo lo que he leído dice que la salida TEST003 debe mirar idéntica a la salida TEST001 que es exactamente lo que estoy tratando de lograr.

¿Qué me estoy perdiendo aquí? Debería ser "sí" Ing diferente o debería ser "eval" ing lugar y si es así, ¿cómo?

Gracias por cualquier ayuda ...

¿Fue útil?

Solución

Todos tenemos esas noches! Proveedores:

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

Otros consejos

En primer lugar, yo recomendaría usar Storable.pm en lugar de datos :: Dumper. Almacenable tiene congelación y descongelación métodos que pueden conservar una stucture datos en su forma binaria sin traducir a y volver de texto.

En segundo lugar, no he probado esto, pero no parece que me va a almacenar el hashref cuando "haces $ MEMORIA" El eval está comentada. Proveedores:

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

Me suelen gustar DBM :: profundo para esto. Sin embargo, tengo un capítulo completo sobre "La persistencia de peso ligero" en Mastering Perl que habla de todo menos que una la base de datos del servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top