Question

J'ai essayé de comprendre cela pour longtemps ce soir à façon. Je l'ai googlé à la mort et aucun des exemples ou mes hacks des exemples obtenons des résultats. Il semble que cela devrait être assez facile, mais je ne peux pas le faire. Voici le code:

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

Et voici ma sortie:

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

Tout ce que je lis dit que la sortie de TEST003 devrait ressembler identique à la sortie de TEST001 ce qui est exactement ce que je suis en train de réaliser.

Qu'est-ce que je manque ici? Dois-je être « faire » différemment ou inG devrais-je être « eval » ing au lieu et si oui, comment?

Merci pour toute aide ...

Était-ce utile?

La solution

Nous avons tous les soirs! Essayez:

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

Autres conseils

D'abord, je vous conseille d'utiliser Storable.pm au lieu de Data :: Dumper. Stockable a des méthodes de gel et dégel qui peut préserver une stucture de données dans sa forme binaire sans le traduire à & retour de texte.

Deuxièmement, je ne l'ai pas essayé, mais il ne me semble pas que vous stockez le hashref lorsque vous « faites $ MEMORY » Le eval est commenté. Essayez:

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

J'ai tendance à DBM :: profond pour cela. Cependant, j'ai un chapitre complet sur « La persistance légère » dans Mastering Perl qui parle de tout court d'un serveur de base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top