28.06.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 "Content­type: 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 "Content­type: 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 "Content­type: 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"); # Listen­Zuweisung<br />

print $home[0]; # erstes Element (Skalar!)<br />

($a, $b, $c) = @home; # Listen­Zuweisung (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"; # Skalar­Notation!<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/cgi­bin/confirm.pl?<br />

Name=Ralf­Dieter+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 "Content­type: text/html\n\n";<br />

print

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!