5 4. Server-seitiges Scripting mit Perl - Universität Paderborn
5 4. Server-seitiges Scripting mit Perl - Universität Paderborn
5 4. Server-seitiges Scripting mit Perl - Universität Paderborn
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Vorlesung und Übung<br />
Dr. Peter Pfahler<br />
Institut für Informatik<br />
<strong>Universität</strong> <strong>Paderborn</strong><br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
5<br />
<strong>4.</strong> <strong>Server</strong>-<strong>seitiges</strong> <strong>Scripting</strong> <strong>mit</strong> <strong>Perl</strong><br />
Geschichtlicher Überblick<br />
entwickelt 1987 von Larry Wall.<br />
Wall benötigte eine Möglichkeit, Textdateien zu öffnen<br />
und zu lesen, um Berichte über die Originaldateien zu<br />
erzeugen.<br />
Der Name “<strong>Perl</strong>” kommt von<br />
Practical Extraction and Report Language<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
4<br />
Larry Wall<br />
Die Sprache ist eher dazu ausgelegt, praktisch (einfach in der Anwendung,<br />
leistungsstark, vollständig) zu sein als schön (schlank und elegant).<br />
(aus der Online-Dokumentation)<br />
4-2
Schnell populär geworden:<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Die Wurzeln von <strong>Perl</strong><br />
• <strong>Perl</strong> ist gut für “quick prototyping“.<br />
• Kein extra Compiler nötig. Programme werden beim Aufruf übersetzt.<br />
• Kostenlos verfügbar, Open Source.<br />
• Stark in der Text-Verarbeitung: Einsatz in der Systemadministration.<br />
• Sehr oft eingesetzt für die CGI-Programmierung.<br />
<strong>4.</strong>1. CGI-Programmierung <strong>mit</strong> <strong>Perl</strong><br />
#!"C:\xampp\perl\bin\perl.exe"<br />
print "Contenttype: text/html\n\n";<br />
print '';<br />
print '';<br />
print 'First <strong>Perl</strong>';<br />
print '';<br />
print 'GCI with <strong>Perl</strong>';<br />
print 'CGI with <strong>Perl</strong> is running';<br />
print 'Time: ' . localtime();<br />
print '';<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
4-3<br />
4-4
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
CGI-Programmierung <strong>mit</strong> <strong>Perl</strong><br />
Verarbeitung von HTML-Formulardaten:<br />
Datenüber<strong>mit</strong>tlung per<br />
<br />
POST-Methode.<br />
<br />
Datenempfang per<br />
Greet Form<br />
Standard-Eingabe<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
CGI-Programmierung <strong>mit</strong> <strong>Perl</strong><br />
#!"C:\Programme\xampp\perl\bin\perl.exe"<br />
print "Contenttype: text/html\n\n";<br />
print "My Query String is:";<br />
print "" . . "";<br />
Die Content-Type-Ausgabe veranlasst den <strong>Server</strong>,<br />
den korrekten http-Header für HTML-Texte zu produzieren.<br />
Die extra Leerzeile beendet diesen Header.<br />
Datenüber<strong>mit</strong>tlung per<br />
POST-Methode.<br />
Datenempfang per<br />
Standard-Eingabe<br />
4-5<br />
4-6
Datenüber<strong>mit</strong>tlung <strong>mit</strong> der GET-Methode<br />
HTML-Text:<br />
<br />
<br />
<br />
<br />
<strong>Perl</strong>-Skript:<br />
print "Contenttype: text/html\n\n";<br />
$query = $ENV{'QUERY_STRING'};<br />
$query =~ /name=(.*)/;<br />
$who=$1;<br />
print "Hello $who!";<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Datenüber<strong>mit</strong>tlung per<br />
GET-Methode.<br />
Datenempfang durch<br />
Umgebungs-Variablen<br />
Die Variable $ENV{'REQUEST_METHOD'} enthält die Übergabe-Methode<br />
(entweder "GET" oder "POST").<br />
So können <strong>Perl</strong>-Skripte geschrieben werden, die für beide Methoden funktionieren.<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
<strong>4.</strong>2. Variablen in <strong>Perl</strong><br />
<strong>Perl</strong> kennt verschiedene Arten von Variablen.<br />
Der Präfix des Namens gibt die Art an:<br />
Variablen werden implizit durch Verwendung definiert:<br />
$camels = 123; # eine ganze Zahl<br />
Sie sind dynamisch typisiert:<br />
$camels = "123"; # ein String<br />
Typanpassung geschieht implizit:<br />
print $camels + 1 . "\n"; # String > int und zurück<br />
4-7<br />
4-8
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Skalare Variablen<br />
Skalare Variablen nehmen Zahlen (ganze und Gleitpunktzahlen), Strings oder<br />
Referenzen auf:<br />
$answer = 42; # ganze Zahl<br />
$pi = 3.141; # Gleitpunktzahl<br />
$apples = 6.02e23; # <strong>mit</strong> Exponent<br />
$pet = "Camel"; # ein String<br />
$sign = "I love my $pet"; # String <strong>mit</strong> Ersetzung<br />
$cost = 'It costs $100'; # String ohne Ersetzung<br />
$cwd = `pwd`; # Ausführung von “pwd”<br />
$myref = \$pet; # Referenz auf $pet<br />
Die Anführungszeichen (quotes) bedeuten:<br />
" String <strong>mit</strong> Ersetzung (interpolation)<br />
' String ohne Ersetzung<br />
` Ausführung<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Array-Variablen<br />
Geordnete Liste beliebiger Werte, numerisch indiziert:<br />
@home = ("couch", "chair", "table"); # ListenZuweisung<br />
print $home[0]; # erstes Element (Skalar!)<br />
($a, $b, $c) = @home; # ListenZuweisung (Destructuring)<br />
($a, $b) = ($b, $a); # Vertauschung<br />
Nützliche Funktionen für Arrays<br />
4-9<br />
4-10
Hash-Variablen (Assoziative Arrays)<br />
Ungeordnete Menge von Werten, auf die <strong>mit</strong> einen String-Schlüssel zugegriffen wird.<br />
Inhalt eines solchen assoziativen Arrays sind also immer Paare (Schlüssel, Wert):<br />
%tr1 = ("Sun" => "Sonne", "Moon" => "Mond");<br />
$tr1{"Earth"} = "Erde"; # SkalarNotation!<br />
%tr2 = ("Star" => "Stern", %tr1) # Hash integrieren<br />
%h = ("a", 1, "b", 2, "c", 3) # Äquiv. Initialisierung<br />
Nützliche Funktionen für Hashes<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
$skalar = "Camel";<br />
@array = (1,2,3);<br />
%hash = ("Oktober" => 10);<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Referenzen<br />
Referenzen sind Verweise auf solche Variablen:<br />
$refskalar = \$skalar;<br />
$refarray = \@array;<br />
$refhash = \%hash;<br />
print "$refskalar $refarray $refhash";<br />
print erzeugt: SCALAR(0x81037a4) ARRAY(0x81037d4)<br />
HASH(0x8103834)<br />
Dereferenzierung geschieht durch Voranstellung des Präfixes für den referenzierten<br />
Typ:<br />
print $$refskalar # schreibt "Camel"<br />
print @$refarray # schreibt "123"<br />
print %$refhash # schreibt "Oktober10"<br />
4-11<br />
4-12
Anwendungsbeispiel 1: Punkteliste<br />
Die Aufgabe besteht darin, eine Punkteliste für Studierende nach Namen zu<br />
sortieren und für jeden Namen die Punkte und die durchschnittliche Punktezahl<br />
auszugeben.<br />
Beispiel-Eingabe (Datei „grades“)<br />
Anton 1<br />
Werner 2<br />
Heidi 1<br />
Monika 3<br />
Anton 5<br />
Heidi 3<br />
Beispiel-Ausgabe<br />
Anton: 1 5 Average: 3<br />
Heidi: 1 3 Average: 2<br />
Monika: 3 Average: 3<br />
Werner: 2 Average: 2<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Anwendungsbeispiel 1: Punkteliste<br />
#! /usr/bin/perl<br />
open(GRADES, "
Anwendungsbeispiel 2: CGI-Skript <strong>mit</strong> GET-<br />
Übergabe<br />
URL:<br />
http://localhost/cgibin/confirm.pl?<br />
Name=RalfDieter+Krau%DF&<br />
Strasse=%DCckern+56&<br />
Ort=33102+<strong>Paderborn</strong><br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
Anwendungsbeispiel 2: HTML-Formular<br />
<br />
<br />
Vorname und Name<br />
<br />
<br />
Strasse und Hausnummer<br />
<br />
<br />
Postleitzahl und Ort<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
© Peter Pfahler, Michael Thies, <strong>Universität</strong> <strong>Paderborn</strong><br />
4-15<br />
4-16
Anwendungsbeispiel 2: Generierung der<br />
Bestätigungsseite<br />
#! /usr/bin/perl<br />
print "Contenttype: text/html\n\n";<br />