Perl Überblick
CGI Anwendungen
eine interpretierte Sprache,
für Erschließung, Aufbereitung und Neuformatierung
beliebiger Textdateien
kann C
, sed
,
awk
und sh
ersetzen
überwindet alle Beschränkungen dieser Sprachen
Perl von Lary Wall entwickelt, Version 5.0.
Auch Pathologically Eclectic Rubbish Lister
Perl Dateien haben Endung .pl
.
Ausführung mit
perl tuwas.pl
Unter UNIX andere Variante:
#!/usr/bin/perl
#
Unix Kommentar,
!
der Name eines Kommandointerpreters folgt
/usr/bin/
ist eine Pfadangabe,
Kurzes Beispiel:
Frage nach dem Namen und Ausgabe von "Hallo, ... !
"
(1) #!perl (2) print "Wie ist dein Name ? "; (3) $name = <STDIN>; (4) chop($name); (5) print "Hallo, $name !\n";
der Kontext in dem ein Literal oder eine Variable verwendet wird, wird durch die verwendeten Operatoren erzwungen.
Beispiel
"33" + "44"
ergibt Zahl77
33 . 44
ergibt Zeichenkette"3344"
Beispiel: Array
@fred = (11,22,33); @barney = @fred;
Beispiel: assoziatives Array
%fred = (1,22,'h',33,"\t",44); %barney = %fred;
Beispiel: Skalare
$b = $a + $fred[2] + $fred{'h'};
Statements,
z.B. Zuweisungen VAR = EXPR;
,
Folgen von Statements { ... }
,
Statements immer mit Semikolon abgeschlossen
Kontrollstatements
sub name BLOCK;
Funktionen werden mit dem Schlüsselwort sub
definiert. Zum Aufruf von Funktionen wird &name
verwendet.
if (EXPR) BLOCK [ elsif BLOCK ... [ else BLOCK ] ];
Im Gegensatz zu C müssen nach if (EXPR)
immer
geschweifte Klammern { }
stehen.
unless (EXPR) BLOCK [ elsif BLOCK ... [ else BLOCK ] ];
Wie if (NOT EXPR)
.
while (EXPR) BLOCK;
for (EXPR; EXPR; EXPR) BLOCK;
Die For-Schleife ist wie in C.
foreach VAR (ARRAY) BLOCK;
Beispiel: foreach $a (@fred) { print "$a\n"; };
EXPR || die "Reason";
Falls die Auswertung von EXPR
fehlschlägt
wird das Perl Program abgebrochen.
Reason
wird auf STDERR
ausgegeben.
Nach der Auswertung der Ausdrücke EXPR
bedeuten die leere Zeichenkette ""
,
"0"
und 0
false;
alle anderen Werte bedeuten true
(z.B. auch "00"
).
Match-Operatoren und Variablen Substitutionen.
VAR =~ m/reg-expr/;
Sucht nach dem regulären Ausdruck reg-expr
in der Variablen VAR
.
VAR =~ s/old/new/;
Substituiert den Ausdruck old
durch den Ausdruck new
in der Variablen VAR
.
VAR =~ tr/a-z/A-Z/;
Ersetzt die entsprechenden Zeichen
in der Variablen VAR
, d.h.
a
wird durch A
ersetzt usw.
Dateien, Pipes und Filehandles.
open( FILEHANDLE, "name" );
Öffnet die Datei name
zum lesen.
open( FILEHANDLE, ">name" );
Öffnet die Datei name
zum (über)schreiben.
open( FILEHANDLE, ">>name" );
Öffnet die Datei name
zum schreiben,
der alte Inhalt bleibt erhalten.
open( FILEHANDLE, "|name" );
Startet das Programm name
und
öffnet eine Pipe zum schreiben auf
STDIN
dieses Programms.
close( FILEHANDLE );
<FILEHANDLE>
Liefert die nächste Zeile der Datei.
print( FILEHANDLE, EXPR );
Schreibt auf die Datei FILEHANDLE
,
ohne FILEHANDLE
wird auf STDOUT
geschreiben.
Print-Formatierung
format FILEHANDLE = fieldline_1 valueline_1 fieldline_n valueline_n .
Definiert ein Printformat für die Datei FILEHANDLE
.
fieldline_i
definiert das Aussehen einer Zeile und
valueline_i
listet alle Werte und Variablen, die
ausgegeben werden sollen.
Zum Beispiel durch das Format
format STDOUT = @#### @<<<<< @||||| @>>>>> $a, $b, $b, $b .
wird die Ausgabe der Werte der Variablen $a
und $b
auf STDOUT
definiert.
Dabei wird $a
als Zahl
in einem Feld der Länge 5 formatiert,
das erste $b
wird als Zeichenkette linksbündig
in einem Feld der Länge 6 formatiert,
das zweite $b
wird als Zeichenkette zentriert
in einem Feld der Länge 6 formatiert,
schliesslich wird
das letzte $b
als Zeichenkette rechtsbündig
in einem Feld der Länge 6 formatiert,
format FILEHANDLE_TOP =
Definiert ein Format für den Kopf einer Ausgabeseite.
write FILEHANDLE;
Damit wird ein Datensatz entsprechend dem Format
mit den aktuellen Werten der Variablen geschreiben.
Perl Funktionen reichen von arithmetischen Funktionen und Funktionen für Zeichenketten bis zu Datenbank, Netzwerk und Interprozesskomunikations Funktionen.
Perl Skript, das mit CGI zusammenarbeitet. Es dekodiert die von GCI empfangenen Variablen und Werte, generiert eine HTML Seite mit diesen Informationen und schickt sie an den Absender zurück.
#!/usr/bin/perl # test perl program to be used for parsing CGI methods # send anything to this script either via GET or POST methods &InsertHeader("CGI generated text"); &Parse; &InsertTrailer; # subrountines sub Parse { local(@pairs,$pair,$val,$pos, $i); if ($ENV{'REQUEST_METHOD'} eq "GET") { $in = $ENV{'QUERY_STRING'}; print "Submitted via GET<P>\n"; } elsif ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $in, $ENV{'CONTENT_LENGTH'}+1); print "Submitted via POST<P>\n"; } $i = 0; @pairs = split(/&/, $in); foreach $pair (@pairs) { # do the special character conversion $pair =~ tr/+/ /; $pair =~ s/%(..)/pack("c",hex($1))/ge; $pos = index($pair,"="); $name = substr($pair,0,$pos); $val = substr($pair,$pos+1); $i++; $entry{$name} = $val; print "$i: entry\{\"$name\"\} = $entry{$name}<BR>\n"; } return 1; } sub InsertHeader { local ($htmltitle) = @_; print "Content-type: text/html\n\n"; print "<HTML>\n<HEAD>\n<TITLE> " print "$htmltitle </TITLE>\n</HEAD>\n"; print "<BODY>\n"; return 1; } sub InsertTrailer { print "</BODY>\n</HTML>\n"; return 1; }
&InsertHeader;
bezeichnet eine Funktion, die
einen korrekten HTML Header erzeugt.
&InsertTrailer;
erzeugt den letzten Teil
der HTML Seite.
&Parse;
zerlegt die CGI-Parameter wie
im Abschnitt zu CGI besprochen.
Beispiele mit dem Script ex1-cgi.html
Zum Ausdrucken der Umgebungsvariablen klicken Sie hier.
Zum Ausdrucken der Umgebungsvariablen mit Querystring klicken Sie hier.
Das nächste Script benutzt ein Formular mit "Radio Buttons".
Ein neues Formular mit "Check Boxen", "PopUp Selektoren" und "Textbereichen".
Beispiele mit dem Script ex2-cgi.html
Dieses Script gibt alle "name-value" Paare der
QUERY_STRING
Variable aus (GET Methode).
Dieses Script gibt alle "name-value" Paare von
stdin
aus (POST Methode).
Beispiele mit dem Script ex3-cgi.html
Dieses Script schickt eine Email an den angegebenen Adressaten.
Beispiele mit dem Script ex4-cgi.html
Dieses Script schreibt eine Nachricht in ein Log-File.
© Universität Mannheim, Rechenzentrum, 1998/1999.