Take: Daten mit Storable speichern

Beitrag lesen

Moin,

@foo = ("foo", "bar", "foo1", "bar1");
@bar = ("foo2", "bar2", "foo3", "bar3");

%complete = (foo => @foo, bar => @bar);

open (DB, ">db.db");
store_fd(%complete, *DB);
close (DB);


> >   
> > Und zum Einlesen:  
> >   
> > ~~~perl
  

> > open (DB, "<db.db");  
> > %complete = %{fd_retrieve(*DB)};  
> > close (DB);  
> >   
> > @foo = %{$complete{"foo"}};  
> > @bar = %{complete{"bar"}};  
> > 

was mir auffällt (neben dem was Beat schon bemängelt):
du verwendest kein use strict?

das ist nur ein Beispiel. In Wirklichkeit benutze ich File-Locking wie hier beschrieben

Warum benutzt du Arrays, wenn du ein Hash hast?

Sorry, mein Fehler. Es muss natürlich:

@bar = @{$complete{"bar"}}; heißen.

Warum prüfst du nicht die Dateioperationen?

Du meinst mit

open (FOO, "bar.txt") || die "someerror";? -> s.o.

Das wird bei vielen Variablen recht unübersichtlich (vorallem beim dereferenzieren nach dem Einlesen). Über Vorschläge zur Übersichtlichkeitsoptimierung würde ich mich daher freuen! :D

Verwende einen eigenen Namespace zum einlesen und speichern der Daten.

Die get Funktion könnte dann z.b. so aussehen:

sub get{

my $name = shift;
my $ref = $complete{$name};
return unless $ref;
return wantarray ? %$ref : $ref;
}


>   
  
Damit muss ich trotzdem jede Variable einzeln behandeln:  
  
~~~perl
  
@foo = get("foo");  
@bar = get("bar");  
...  

-> Das Problem bleibt.
Ich hatte an eine Art Schleife gedacht, die mir für jeden Key im Hash %complete das im dazugehörigen Value referenzierte Array in das Array mit dem Namen des Keys dereferenziert. (Was ein Satz...) :D
Also (Pseudocode):

foreach (keys(%complete)) {  
    @array_dessen_name_in_$_steht = @{$complete{$_}};  
}  

Struppi.

Trotzdem vielen Dank!
Gruß,
Take