Bei einer Übergabe von Daten eines Formulars werden sämtliche Angaben (e.g. Namen der Formularelemente& dazugehörige Werte) in einem einzigen String zusammengefasst, nach ganz bestimmten Regeln:
- 'Die einzelnen Formularelemente inclusive ihrer Daten werden durch ein kaufmännisches & voneinander getrennt.Wichtig: Formulare definieren/ GET und POST
Vom CGI- Programm muss dieser zusammenhängende String nun zuerst eingelesen, wieder getrennt und decodiert werden:
if($ENV{'REQUEST_METHOD'} eq 'GET') { $Daten = $ENV{'QUERY_STRING'} } else { read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'}); } @Formularfelder = split(/&/, $Daten); 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///g; $Formular[$i] = $name; $i = $i + 1; $Formular[$i] = $value; $i = $i + 1; }
"Mit der Anweisung @Formularfelder = split(/&/, $Daten); wird die Zeichenkette $Daten in eine Liste verwandelt. Als Trennzeichen, das aus dem Datenstrom Listenelemente macht, wird das kaufmännische Und (&) angegeben. Durch dieses Zeichen sind die im Formulardatenstrom die einzelnen Formularfelder voneinander getrennt.
Anschließend werden die einzelnen Felder der neuen Liste @Formularfelder in einer foreach-Schleife behandelt. Zuerst wird jedes Formularfeld in zwei Bestandteile zerlegt, wobei als Trennzeichen das Istgleichzeichen angegeben wird. Die beiden Teile werden in den Skalaren $name und $value abgelegt. In $name steht dann genau das, was in dem betreffenden HTML-Formularelement mit der Angabe name= definiert wurde. In $value steht das, was der Anwender als Wert für das betreffende Formularelement eingegeben oder ausgewählt hat. Angenommen, das HTML-Formular enthält ein einzeiliges Eingabefeld, das mit <input name="Spitzname" size=60 maxlength=60> definiert wurde. Weiter angenommen, der Anwender hat in diesem Feld "Hotzenplotz" eingegeben. Dann steht für dieses Formularfeld im Skalar $name der Wert Spitzname, und im Skalar $value steht der Wert Hotzenplotz.
Mit den Suche-Ersetze-Vorgängen in den weiteren Anweisungen der for-Schleife werden die störenden Steuerzeichen, die noch aus dem Formulardatenstrom übrig geblieben sind, entfernt.
Die Daten des Formulars werden schließlich in eine Liste @Formular geschrieben. Die geraden Elemente dieser Liste, also $Formular[0], $Formular[2], $Formular[4] usw. enthalten die Feldnamen, zu denen der Anwender Angaben gemacht hat. Die ungeraden Elemente, also $Formular[1], $Formular[3], $Formular[5] enthalten die jeweils zugehörigen Daten, die der Anwender eingegeben oder ausgewählt hat. Diese Liste können Sie im weiteren Verlauf des Perl-Scripts weiterverarbeiten." (SelfHTML)