Domanda

Ho cercato di conoscere questo numero per modo di lungo stasera. Googled a morte e nessuno dei miei esempi o hack degli esempi sono sempre fatto. Sembra che questo dovrebbe essere abbastanza facile, ma non riesco proprio a farlo. Ecco il codice:

#!/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 qui è la mia uscita:

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

Tutto ciò che ho letto dice che l'uscita TEST003 dovrebbe essere identica a quella uscita TEST001 che è esattamente ciò che sto cercando di realizzare.

Che cosa mi manca qui? Dovrei essere "sì" Ing diverso o dovrei essere "eval" ing, invece, e se sì, come?

Grazie per qualsiasi aiuto ...

È stato utile?

Soluzione

Tutti noi abbiamo quelle serate! Prova:

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

Altri suggerimenti

In primo luogo, mi consiglia di utilizzare Storable.pm invece di Data :: Dumper. Riponibile ha congelamento e scongelamento metodi che possono conservare uno stucture di dati nella sua forma binaria, senza tradurlo a & indietro dal testo.

In secondo luogo, non ho provato questo ma non mi pare si memorizza il rifhash quando si "fa $ MEMORY" L'eval è commentata. Prova:

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

tendo a come DBM :: Deep questo. Tuttavia, ho un intero capitolo su "leggera persistenza" in Mastering Perl che parla di tutto ciò che a corto di un server di database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top