Practical Extraction and Report Language
C, sed,
awk und sh ersetzen
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,
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 . 44ergibt Zeichenkette"3344"
@fred = (11,22,33);
@barney = @fred;
Beispiel: assoziatives Array
%fred = (1,22,'h',33,"\t",44);
%barney = %fred;
$b = $a + $fred[2] + $fred{'h'};
z.B. Zuweisungen VAR = EXPR;,
Folgen von Statements { ... },
Statements immer mit Semikolon abgeschlossen
Kontrollstatements
sub name BLOCK;sub
definiert. Zum Aufruf von Funktionen wird &name
verwendet.
if (EXPR) BLOCK [ elsif BLOCK ... [ else BLOCK ] ];if (EXPR) immer
geschweifte Klammern { } stehen.
unless (EXPR) BLOCK [ elsif BLOCK ... [ else BLOCK ] ];if (NOT EXPR).
while (EXPR) BLOCK;
for (EXPR; EXPR; EXPR) BLOCK;foreach VAR (ARRAY) BLOCK;foreach $a (@fred) { print "$a\n"; };
EXPR || die "Reason"; 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").
VAR =~ m/reg-expr/;reg-expr
in der Variablen VAR.
VAR =~ s/old/new/;old
durch den Ausdruck new
in der Variablen VAR.
VAR =~ tr/a-z/A-Z/;VAR, d.h.
a wird durch A ersetzt usw.
open( FILEHANDLE, "name" );name zum lesen.
open( FILEHANDLE, ">name" );name zum (über)schreiben.
open( FILEHANDLE, ">>name" );name zum schreiben,
der alte Inhalt bleibt erhalten.
open( FILEHANDLE, "|name" );name und
öffnet eine Pipe zum schreiben auf
STDIN dieses Programms.
close( FILEHANDLE );
<FILEHANDLE> print( FILEHANDLE, EXPR );FILEHANDLE,
ohne FILEHANDLE wird auf STDOUT
geschreiben.
format FILEHANDLE = fieldline_1 valueline_1 fieldline_n valueline_n .
FILEHANDLE.
fieldline_i definiert das Aussehen einer Zeile und
valueline_i listet alle Werte und Variablen, die
ausgegeben werden sollen.
format STDOUT = @#### @<<<<< @||||| @>>>>> $a, $b, $b, $b .
$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 =write FILEHANDLE;
#!/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> $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.