Oliver Zwenzner: PERL-Script (Hash-Liste erzeugen)

Ich möchte in einem Perl-Script alle Feldnamen/Werte-Paare eines Formulars einer Hash-Liste zuweisen.
Hier der Ausschnitt (leicht modifiziertes Script aus einem SELFHTML-Beispiel):

read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
@Formularfelder=split(/&/, $Daten);
%Formular=("Feldname","Wert");

foreach $Feld (@Formularfelder)
{
        ($name, $value)=split(/=/, $Feld);
        $value=~ tr/+/ /;
        $value=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value=~ s/<!--(.|\n)*-->//g;
        #$Formular{$name}=$name;
        #$Formular{$value}=$value;
        push(%Formular, $name, $value);
}

Und so will ich dann die Werte abfragen:

print "<td> $Formular{'Wunschtermin'} </td>\n";

Der Web-Server meldet, dass die push-Methode für Hashs nicht erlaubt ist. Wie füge ich dann die Formularfelder an die Hash-Liste an ???

  1. Hallo Oliver,

    Ich möchte in einem Perl-Script alle Feldnamen/Werte-Paare eines Formulars einer Hash-Liste zuweisen.
    Hier der Ausschnitt (leicht modifiziertes Script aus einem SELFHTML-Beispiel)

    Der Beispiel-Code in SELFHTML funktioniert zwar, wenn man nichts daran aendert, ist nicht optimal, weil er mit einer normalen Liste arbeitet statt mit einem assoziativen Array. Nimm mal die folgende Funktion zum Einlesen des Formulars:

    sub Formulardaten_einlesen {

    liest Formdaten nach der post-Methode ein.

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
       @pairs = split(/&/, $buffer);
       foreach $pair (@pairs) {
          ($name, $value) = split(/=/, $pair);
          $value =~ tr/+/ /;
          $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
          $FORM{$name} = $value;
       }
    }

    Nach Aufurufen dieser Funktion kannst Du dann mit so Ausdruecken wie $FORM{'Anrede'} oder $FORM{'Vorname'} oder $FORM{'Nachname'} auf einzelne Formulardaten zugreifen (im Beispiel auf Felder mit <input name="Anrede">, <input name="Vorname">, <input name="Nachname">).

    Viele Gruesse
      Stefan Muenz