#! /usr/bin/perl use warnings; use strict; use CGI; # versucht, nicht nur fehler, sondern auch warnungen # im browser auszugeben; diese Zeile sollte auskommentiert # werden, wenn das script zufriedenstellend laeuft, um so # keinem Hacker mehr Infos zu geben als noetig use CGI::Carp qw(fatalsToBrowser warningsToBrowser); # bei manchen Webservern ist das aktuelle Verzeichnis nicht # das, in dem das cgi-Script liegt. $FindBin::Bin enthaelt den # pfad zum gerade ausgefuehrten Script, und man kann seine # datei relativ zum cgi-script legen, und ist so portabler als # mit einem hardgecodeten absolutem pfad use FindBin; my $file = "$FindBin::Bin/RETest.html"; # oder: my $file = "$FindBin::Bin/daten/RETest.html"; # neues CGI-Objekt erzeugen my $cgi = CGI->new(); # liest alle cgi-parameter aus und weist sie %content zu my %content = $cgi->Vars(); # wenn ein rezept eingegeben wurde, speichere es if (scalar(keys %content)) {  # datei zum anhaengen oeffnen  unless (open (FILE, ">> $file")) {    die "Error: couldn't open file '$file' for appending: $!\n";  } # unless  # schreibe das neue Rezept in die Datei; wie das geht,  # haengt davon ab, welches Format du waehlst, z.B.  # titel: neues Rezept fuer Pflaumenkuchen  # rezept: Man nehme:
Wasser
Eier
Zucker...  # (leerzeile)  # titel: neues Rezept fuer Apfelkuchen  # rezept: Man nehme:
Wasser
Eier
Zucker...  # muss so heissen wie in der HTML-Form  my $title = $content{Rezepttitel};  my $rezept = $content{Rezept};  # "gefaehrliche" sonderzeichen, die das format  # beeintraechtigen koennen, ersetzen  foreach ($title, $rezept) {    $_ = $cgi->escapeHTML($_); # html-sonderzeichen    s|\r?\n|
|g; # zeilenumbrueche zu
 }  print FILE "titel: $title\nrezept: $rezept\n\n";  # schliesse datei; falls es fehlschlaegt, fehlermeldung (z.B:  # Festplatte voll)  close(FILE) or die "Error: couldn't close file '$file': $!\n"; } # if # gebe die HTML-Seite aus # HTTP-Header ausgeben print $cgi->header(); # HTML-Header ausgeben; fuer weitere optionen: perldoc CGI print $cgi->start_html(-title => 'Rezeptseite'); print $cgi->h1("Meike's Rezepte"); # datei zum lesen oeffnen unless (open (FH, "< $file")) {  die "Error: couldn't open file '$file': $!\n"; } # unless else {  # lese nicht zeilen-, sondern blockweise  local $/ = "\n\n";  # rueckwaerts lesen, sodass das neueste rezept  # immer oben kommt und das aelteste ganz unten  foreach my $entry (reverse ) {    chomp($entry); # \n\n rauswerfen    # block an zeilenumbruch aufsplitten    my ($titel, $rezept) = split(/\n/, $entry);    # am anfang steht ja noch unnuetz titel: bzw. rezept:    # drinnen; das soll nun fuer die Ausgabe weg    $titel =~ s/^titel://; $rezept =~ s/^rezept://;    # das zeug ausgeben:    print $cgi->h2($titel);    print $cgi->p($rezept);    print $cgi->hr(); # vielleicht eine trennlinie ausgeben  } # foreach  # Datei schliessen  close(FH); } # else # HTML beenden print $cgi->end_html();