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