Konkret: Ich möchte einem Skalar einen Wert zuweisen, welcher in einer
externen Datei gespeichert ist. Vermutlich könnte das ungefähr so aussehen:
open(AKTHLES,"<","AktuellH.txt") || die "Datei nicht gefunden";
my %Aktuelle_Daten = <AKTHLES>;
Ein Hash ist ein gutes Speicerhmedium, aber diese Art der Zuweisung ist extrem riskant.
Ein Hash ist kein Scalar, sondern ein Assoziativer Array.
Wenn du wirklich die ganze Datei in einem einzigen Scalar speichern willst
my $scalar = <Filehandle>;
close(AKTHLES);
my $GrafTel = my "$Aktuelle_Daten('GrafTel')";
use warnings hätte dir hier eine Meldung hinterlassen.
Wenn du ein hashelement ansprechen willst, verwendest du
$hash{key} {} statt ()
>
> Das einzige was ich nach den Experimenten mit Sicherheit sagen kann, ist dass die externe Datei an sich aufgerufen und ausgelesen werden kann.
>
> Ich habe unzählige Varianten (Komma, Klammern, Anführungszeichen an verschiedensten stellen) durchprobiert, ebenso diverse Notationen der Werte in der externen Datei.
> Eine denkbare Alternative wäre auch, die "fertigen" Skalare (inkl. Wert) in der externen Datei zu speichern. Also:
> ~~~perl
my $GrafTel = "zu.png"
> my $GrafBob = "zu.png"
>
Aber auch so habe ich das Problem, diese dann in das Skript zu "importieren".
Das erstaunliche ist, dass ich bis auf obenstehendes Problem alles funktioniert (zumindest auf dem lokalen Indianer und in der vorliegenden - ungeschminkten - "Rohfassung").
Ok. ich weiss jetzt, was du willst.
Nimm an, dein File sieht so aus:
Key1=Wert1\n
irgend ein Kommentar
Key2=Wert2\n
...
Key3=Wert3\n
Um diese Daten in einem Perl Variable zu speichern ist ein Hash geeignet.
my %Data;
open(FH,"<","DB.txt") or die ('Kein Zugriff DB File $!')
#Zeilenweise auslesen
while(<FH>){
# solange ich eine Zeile bekomme
# durchsuche die Zeile nach (key)=(wert) und speichere sie in %Data
$_ =~ /^(.+?)=(.*)/ and $Data{$1} = $2;
}
close(FH);
Jetzt kannst du sagen:
$Data{Name} eq 'Peter' and do_something();
mfg Beat