Perl memorizzazione dei dati persistenti utilizzando Data :: Dumper
-
22-09-2019 - |
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 ...
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.