Klaus Mock: Daten eines Hashs anzeigen

Beitrag lesen

Hallo,

[...]Inhalt der Textdatei sieht dann so aus:  name=Tim&text=Das+ist+Tims+Text&name=Anja&text=Das+ist+Anjas+Text&).
[...] einzig, es wird immer nur der letzte Eintrag der Textdatei angezeigt (trotz meiner unglaublichen while-Schleife). Und genau das ist mein Problem: Was zum Teufel muss ich machen, damit alle Inhalte der Textdatei angezeigt werden ?????

Ich denke Du solltest Dir zu aller erst überlegen, unterschiedliche Zeichen für das Trennen der Felder und der Datensätze zu verwenden.
Also z.B. irgendwas in der Art

name=Tim&text=Das+ist+Tims+Text;name=Anja&text=Das+ist+Anjas+Text;
(wobei '&' das Trennzeichen zwischen den einzenen 'Feldern' ist und ';' zwischen den einzelnen Datensätzen)

Du muß nur Zeichen verwenden, welche nicht Bestandteil des Textes sein können bzw. diese ensprechend vor dem Eintragen in Deine Textdatei maskieren.

@cgidatenliste = split(/[&;]/ , $cgidatenskalar);
foreach $listeneintrag (@cgidatenliste)
  {
  $listeneintrag =~ s/+/ /go;
  ($name, $daten) = split( /=/ , $listeneintrag);
  $name =~ s/%(..)/pack("c",hex($1))/ge;
  $daten =~ s/%(..)/pack("c", hex($1))/ge;
  $cgidatenhash{$name} = $daten;
  }
return %cgidatenhash;
}

Hier steckt auch ein Wurm drinnen, überleg einmal:

@cgidatenliste = split(/[&;]/ , $cgidatenskalar);

Du bekommst ein array mit folgenden Eintägen:
@cgidatenliste[0] = 'name=Tim'
@cgidatenliste[1] = 'text=Das+ist+Tims+Text'
@cgidatenliste[2] = 'name=Anja'
@cgidatenliste[3] = 'text=Das+ist+Anjas+Text;'

Jetzt gehts in die Schleife: (nur der relevante Teil)
Beim ersten Durchlauf: $cgidatenhash{'name'} = 'Tim';
Beim zweiten Durchlauf: $cgidatenhash{'text'} = 'Das ist Tims Text';
Beim dritten Durchlauf: $cgidatenhash{'name'} = 'Anja';
...
Äh, jetzt wird der Eintrag vom ersten Durchlauf gerade überschrieben.
Das geht jetzt so weiter, bis Du alle Daten eingelesen hast. Und am ende bleibt nur mehr der letzte Eintrag über.

Dein Problem kannst Du z.B. mit einer 'List of Hashes' lösen. Wie das alles geht findest Du unter
perldoc perldsc

Grüße
  Klaus

BTW: Ohne Einrückungen ist der Code ganz schön schwierig zu lesen.