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 . 44
ergibt 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.