Perl persistente Datenspeicherung mit Hilfe von Data :: Dumper
-
22-09-2019 - |
Frage
Ich habe versucht, diese aus für viel zu lang heute Abend Figur. Ich habe es zu Tode gegoogelt und keines der Beispiele oder meine Hacks der Beispiele werden immer es getan. Es scheint so, das ist ziemlich einfach sein sollte, aber ich kann es einfach nicht bekommen. Hier ist der 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";
Und hier ist meine Ausgabe:
$VAR1 = {
'key2' => 'value2',
'key1' => 'value1',
'key3' => 'value3',
'key' => 'value'
};
TEST001
$VAR1 = {};
TEST002
$VAR1 = {};
TEST003
Alles, was ich lese, sagt, dass die TEST003 Ausgabe an dem TEST001 Ausgang identisch aussehen soll das ist genau das, was ich zu erreichen versuchen.
Was bin ich hier? Soll ich „tun“ ing anders sein oder sollte ich „eval“ sein ing statt und wenn ja, wie?
Danke für jede Hilfe ...
Lösung
Wir haben alle diese Abende! Versuchen Sie:
$complex_variable = do $MEMORY || die "Bad data";
Andere Tipps
Als erstes würde ich mit Storable.pm statt Daten empfehlen :: Dumper. Storable hat Frost & Auftau-Verfahren, die ein Datum stucture bewahren können es binäre Form ist, ohne es zu & zurück von Text zu übersetzen.
Zweitens, ich habe nicht versucht, aber es scheint nicht zu mir Sie die hashref sind zu speichern, wenn Sie „$ MEMORY do“ Die eval wird als Kommentar gekennzeichnet. Versuchen Sie:
$complex_variable = eval $MEMORY;
print Dumper($complex_variable)."TEST003\n";
Ich neige dazu, wie DBM :: Tief für diese . Allerdings habe ich ein komplettes Kapitel über „Leichtbau Persistence“ in Mastering Perl dass die Gespräche über alles kurz ein Datenbank-Server.