Je nach Request Method (GET/POST) werden die (z.B. Formular-)daten auf unterschiedliche Art übermittelt:
Das CGI- Programm verlangt je nachdem GET oder POST oder ist auf beides ausgelegt:
if($ENV{'REQUEST_METHOD'} eq 'GET') { $buffer = $ENV{'QUERY_STRING'} } else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
(siehe: auch Formulare definieren)
Dateien auf die Standardausgabe zu schreiben ist einfacher, dies erfolgt mit der Funktion print. Wichtig ist die erste Zeile- print "Content-type: text/html\n\n"; -, damit wird eine HTML- bzw. Text-Datei erstellt.
#! /usr/bin/perl print "Content-type: text/html\n\n"; print "<b>Hallo Kloake!</b>\n";
Mit dem bis jetzt erworbenen Wissen sind nun erste Beispielprogramme möglich:
#! /usr/bin/perl #Eingabe auslesen if($ENV{'REQUEST_METHOD'} eq 'GET') { $Bildnr = $ENV{'QUERY_STRING'} } else { read(STDIN, $Bildnr, $ENV{'CONTENT_LENGTH'}); } #Ausgabe print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<title>Beyond Material - Minus 8 - image $Bildnr</title>\n"; print "<link rel=\"stylesheet\" type=\"text/css\" href=\"-8.css\">\n"; print "</head>\n"; print "<body>\n"; print ("<img src=\"../min8/i" ,$Bildnr, ".jpg\">"); print "</body>\n"; print "</html>\n";
Beim Übertragen von Formulardaten wird alles zusammengehängt, Leer- und Sonderzeichen werden ersetzt. Deshalb muss 'im Normalfall' die STDIN bzw. der Query String wieder gesplittet und decodiert werden, um damit arbeiten zu können:
#! /usr/bin/perl #Eingabe auslesen (POST) read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); #String aufsplitten, Zeichen ersetzen, Liste erzeugen @pairs = split(/&/, $buffer); # Name-Werte-Paare splitten foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $value =~ s/<([^>]|\n)*>//g; $FORM{$name} = $value; }
Auf die einzelnen Felder kann nun mit $FORM('name_des_feldes_im_html_doku') zugegriffen werden. Angenommen: ein Form mit zwei Input-Feldern, eines mit name="name", das andere mit name="email". Variablen:
# Strings der Formularfelder in Variablen speichern $name = "$FORM{'name'}"; $email = "$FORM{'email'}";