Programmierung in Perl

Document Sample
Programmierung in Perl Powered By Docstoc
					Programmierung in Perl
    Perl (Practikal Extraction and Report Language) wurde urspr nglich f r die Systemadministration Ende der 80er
Jahre von Larry Wall unter Unix entwickelt, bei der es h u g vorkommt, Textdateien zu durchsuchen, Zeichenketten
herauszul sen und neu zusammenzusetzen. Viele Aufgaben, die bisher mit Hilfe von umfangreichen Shell-Skripten
gel st werden mu ten, konnten nun mit einem Perl-Skript realisiert werden. Dabei sind die Sprachelemente von Perl
so m chtig, da komplizierte Aufgaben, die in anderen Programmiersprachen erst nach wochenlangen Arbeiten zum
Ergebnis f hrten, in Perl innerhalb weniger Minuten gel st werden k nnen.
    Inzwischen wurde Perl um Elemente der Objektorientierten Programmierung erg nzt, auf verschiedene Plattfor-
men portiert und mit Hilfe von Bibliotheken an die Plattformen angepa t, so da Perl inzwischen auf nahezu jedem
System zur Verf gung steht. Viele Anh nger von Perl erstellten mittlerweile leistungsf hige Module, die ber das
CPAN (Comprehensive Archive Network) zur Verf gung stehen. Hier kann man f r fast jedes Problem ein entspre-
chendes Modul nden und so die Entwicklungszeit eigener Perl-Skripte wesentlich verk rzen.
    Einzig nachteilig ist, da es sich bei Perl um eine interpretativ arbeitende Sprache handelt, deren Quellcode
vor dem Ausf hren in einen Tokencode bersetzt wird. Dies f hrt dazu, da Perl in der Abarbeitung komplexer
Aufgaben in der Ausf hrungsgeschwindigkeit hinter manch anderer Sprache hinterher hinkt. Dies wird aber durch die
M chtigkeit der Sprache nachhaltig ausgeglichen, da sich die Entwicklungszeit f r Programme beispielsweise aus dem
administrativen Bereich nachhaltig senken l t.
                                                     KAPITEL 1

                                                  Grundlagen
                                                   1.1. Variablen
    1.1.1. Skalare Variablen. Durch das Zeichen $ am Beginn des Variablen210mmnamen wird eine Variable als
skalare Variable gekennzeichnet. Eine skalare Variable kann sowohl Zahlen als auch Zeichenketten beinhalten, ohne
da eine gesonderte Vereinbarung hierzu n tig w re.
Beispiel: #!/usr/bin/perl
           # Beispiel f r skalare Variablen
           $a = 1 #ganze Zahl
           $hallo = Guten Morgen # Zeichenkette
           $pi=3.14 # Flie kommazahl
    1.1.2. Felder (Arrays). Im Gegensatz zu anderen Programmiersprachen sind Felder in Perl volldynamisch.
Eingeleitet werden Feldvariablen durch ein f hrendes @-Zeichen im Variablennamen. Ferner kann man auf Elemente
des Feldes zugreifen, indem man statt des @-Zeichens ein $-Zeichen voranstellt und einen Index mit anf gt.
Beispiel: #!/usr/bin/perl
            # Beispiel f r Felder und Zusammenhang zu skalaren Variablen
            $month 1]= Januar ;
            $month 2]= Februar ;
            $month 3]= M rz ;
            print $month 2], \n ;#Ausgabe des Monats Februar
            print @month, \n ;# Ausgabe aller Monate ohne Separation
Ferner ist es m glich, mit Hilfe einer Liste eine Feldvariable zu f llen und anschlie end auf die einzelnen Feldelemente
mit Hilfe einer skalaren Variable gleichen Names zuzugreifen. Die Zuweisung an die Array-Variable erfolgt von links
nach rechts, wobei das ersten Listenelement dem Feldelement 0 zugeordnet wird.
Beispiel: #!/usr/bin/perl
            # Beispiel f r Zuweisung mittels Liste
            @vw=( K fer , Golf , Passat , Scirocco );
            print $vw 1], \n ; # Ausgabe des Wortes Golf
            print @vw, \n ; # Ausgabe aller Typen von Volkswagen
Vorsicht ist geboten, wenn man versucht, einer skalaren Variable eine Liste zuzuordnen. Es wird dann nur das letzte
Listenelement zugeordnet.
Beispiel: #!/usr/bin/perl
            # Listenzuweisung an eine skalare Variable
            $vw=( K fer , Golf , Passat );
            print $vw, \n ;
Wird bei einer skalaren Variablen ein Arrayindex angegeben, so ist die Array-Variable gemeint. Wird jedoch eine
skalare Variable gleichen Namens angegeben, so wird das letzte Element betrachtet:
Beispiel: #!/usr/bin/perl
            # Skalare und Feldvariablen gleichen Namens
            $vw=( Seat , VW , Skoda );
            @vw=( K fer , Golf , Passat );
            print $vw 1], \n ; # Zugri auf die Arrayvariable vw
            print $vw, \n ; # Zugri auf die skalare Variable vw
            print @vw, \n ; # Zugri auf die Arrayvariable
Die Verschachtelung von Listen und anderen Variablentypen ist in Perl grunds tzlich zul ssig:
Beispiel: #!/usr/bin/perl
            # Vermischung von Listen, Feldern und skalaren Variablen
            $montag = Montag ;
            @wochenende = ( Samstag , Sonntag );
            @woche = (@wochenende,$montag, Dienstag , Mittwoch , Donnerstag , Freitag );
            print @woche, \n ;
                                                           3
                                                          1.1. VARIABLEN                                                      4

           print @wochenende, \n ;
           print $montag, \n
Ungew hnlich ist folgende Zuweisung:
Beispiel: #!/usr/bin/perl
           # ungew hnliche Zuweisung
           @tage=( Montag , Dienstag , Mittwoch );
           ($tag1, $tag2, $tag3) = @tage; # umgekehrte Zuweisung
           print $tag1, \n ;
           print $tag3, \n ;
           print @tage, \n
Das Feststellen der Anzahl der Elemente in einem Array kann mit folgender Konstruktion erfolgen:
Beispiel: #!/usr/bin/perl
           # Anzahl der Feldelemente
           @buchstaben=( a .. z );
           print Anzahl der Buchstaben ,$#buchstaben; \n ;
Auch die schnelle Aufteilung von Array ist in Perl m glich:
Beispiel: #!/usr/bin/perl
           # Aufteilung von Arrays
           @buchstaben = ( a .. z );
           @teil1=@buchstaben 1..13];
           print Teil1: ,@teil1, \n ;
Der Zugri auf Listen ist hnlich dem Zugri auf Felder:
Beispiel: #!/usr/bin/perl
           # Listenindex
           $liebling=( Connery , Segal , Cage ) 2];
           print $liebling, \n ;
    1.1.3. Hash-Felder (Assoziative Arrays). Bei einfachen Feldern erfolgt der Zugri mittels eines Indizes, also
einer Zahl. Bei Hash-Feldern erfolgt der Zugri ber ein Sch sselwort (beliebige Zeichenkette). Hash-Arrays haben
zu Beginn des Variablennamen ein %-Zeichen. Die Angabe des Hash-Wertes erfolgt in geschweiften Klammern.
Beispiel: #!/usr/bin/perl
            # Hash-Arrays
            %monate=( April ,30, Mai ,31);
            $monate{ Januar }=31;
            $monate{ Februar }=28; # manchmal auch 29
            $monate{ Maerz }=31;
            print %monate, \n ;
            print $monate{ Januar }, \n ;
            print $monate{ April }, \n ;
Folgende Variante in der Schreibweise ist m glich:
Beispiel: #!/usr/bin/perl
            # Schreibweisenvariante
            %monate =( Januar => 31,
             Februar =>28,
             M rz =>31,);1
            print $monate{ M rz }, \n ;

    1.1.4. Referenzvariablen (Zeiger). Wie auch in anderen Programmiersprachen ist es in Perl m glich mit
Referenzen (sprich Zeigern) zu arbeiten. Hierzu wird der \-Operator verwendet.
Beispiel: #!/usr/bin/perl
           # Beispiel f r Variablenreferenzen
           $zeichenkette= Guten Tag ;
           $zeiger = \$zeichenkette;
           print $zeichenkette, \n ;
           print $$zeiger, \n ;
           print $zeiger, \n ;
   1   Das Komma hinter M rz =>31 ist syntaktisch korrekt, um das automatische Erzeugen solcher Hash-Felder zu erleichtern.
                                               1.3. STANDARDFUNKTIONEN                                                 5

                                     1.2. Basisoperationen in Perl
      1.2.1. Arithmetische Operationen.
+, -, *, /   Die Grundrechenarten: Addition, Subtraktion, Multiplikation und Division
++,          Inkrement- und Dekrementoperator: bei beiden Operatoren ist eine Pre x- und Post x-Notation m glich
%            Modulo-Operator: Das Ergebnis ist der Rest einer ganzzahligen Division
**           Potenzierungs-Operator: a ** b wird berechnet als ab
      1.2.2. Zeichenkettenoperationen.
.            Addition zweier Zeichenketten. Durch Hallo . Du entsteht die Zeichenkette HalloDu .
x            Zeichenkettenvervielfacher. Durch Hallo x 3 wird die Zeichenkette Hallo verdreifacht. Das Ergebnis
             ist HalloHalloHallo .
++           Erh hen des Wertes einer Zeichenkette. Dabei ndet die Erh hung auf Zeichenebene und ggf. auch ein
               bertrag statt.
      1.2.3. Bitoperationen.
&, |, ,Operatoren f r das bitweise UND, ODER, NICHT und EXCLUSIV-ODER. Alle Operatoren sind bin r,
       ausgenommen das bitweise NICHT.
<<, >> Der linke und rechte Shiftoperator. Dabei werden einzelne Bits in der angegebenen Richtung verschoben
       (16>>2 = 4).
      1.2.4. Weitere Operatoren.
    cmd      Ausf hren des Kommandos cmd. Ausgaben, die durch das Kommando cmd auf die Standardausgabe
             gemacht werden, k nnen einer Variablen zugewiesen werden ($w= whoami ;).
      1.2.5. Quotingregeln.
\            Aufheben der Sonderbedeutung einzelner Zeichen. Soll beispielsweise das W hrungssymbol $ ausgegeben
             werden, so ist dieses Zeichen durch \$ zu kodieren. Anderenfalls versucht Perl die Zeichenkette hinter dem
             $-Zeichen als Variable zu interpretieren.
             Alle Zeichen innerhalb doppelter Anf hrungszeichen werden nicht interpretiert, ausgenommen Backslash-
             Ersetzungen, $-Zeichen und @-Zeichen (Variablenzugri ).
             Alle Zeichen innerhalb der einfachen Anf hrungszeichen werden nicht interpretiert
                                        1.3. Standardfunktionen
      1.3.1. Variablen und Zeichenketten.
chomp        chomp Variable
             chomp liste
             chomp
             Entfernen des letzten Zeichens einer Zeichenkette (normalerweise ein \n). Ist kein Zeilenendezeichen vor-
             handen, so hat chomp keine Wirkung. Ist keine Variable angegeben, so wird die Standardvariable $_
             benutzt. Zur ckgegeben wird die Anzahl der entfernten Zeichen
chop         chop variable
             chop liste
             chop
             Entfernen des letzten Zeichens einer Zeichenkette. Das entfernte Zeichen wird zur ckgeliefert (vgl. chomp).
chr          chr nummer
             Liefert das Zeichen zur ck, das der Zahl in der Zeichensatztabelle entspricht
crypt        crypt Text, Salt
             Text wird verschl sselt und zur ckgegeben. Die Verschl sselung ist One-Way. Salt ist eine Zahl, die die
             Verschl sselung beein u t.
hex          hex ausdruck
             Ausdruck wird als Zeichenkette interpretiert, die eine hexadezimale Zahl enth lt. Die Funktion hex liefert
             den dezimalen Wert zur ck.
index        index Str, Substr, Position
             index Str, Substr
             Es wird in der Zeichenkette Str die Zeichenkette Substr ab einer Position gesucht. Wird Substr in Str
             gefunden, so wird die Positionsnummer zur ckgegeben. Das Ergebnis 0 steht f r das erste Zeichen; wird
             die Kette nicht gefunden, wird -1 zur ckgegeben.
lc           lc ausdruck
             In der Zeichenkette ausdruck werden alle Gro buchstaben in Kleinbuchstaben umgewandelt.
lc rst       lc rst ausdruck
             In der Zeichenkette ausdruck wird der erste Buchstabe in einen Kleinbuchstaben umgewandelt.
length       length ausdruck
             Es wird die L nge des Ausdrucks zur ckgeliefert.
                                              1.3. STANDARDFUNKTIONEN                                               6

oct          oct ausdruck
             Ausdruck wird als Zeichenkette interpretiert, die eine oktale Zahl enth lt. Die Funktion oct liefert den
             dezimalen Wert zur ck.
ord          ord ausdruck
             ord
             liefert den ASC-II-Wert des ersten Zeichens aus Ausdruck. Ist kein Ausdruck angegeben, so bearbeitet ord
             die Variable $_
pack         pack Template, List
             Umwandlung eines Feldes oder einer Liste in Bin rdarstellung. Zur ckgegeben wird eine Zeichenkette mit
             der Bin rdarstellung des Felder oder der Liste. Template bildet hierbei eine Formatzeichenkette.
reverse      reverse list
             Umkehren einer Liste
rindex       rindex Str, Substr, Position
             rindex Str, Substr
             wie Index, nur wird nicht nach dem ersten Auftreten, sondern nach dem letzten Auftreten der Zeichenkette
             Substr in der Zeichenkette Str gesucht
sprintf      sprintf format, list
             Formatierte Ausgabe von Werten in eine Zeichenkette
substr       substr ausdruck, o set, laenge
             substr ausdruck, o set
             Zerlegen einer Zeichenkette ausdruck ab Position o set mit der L nge laenge. Ohne L ngenangabe wird
             der gesamte Rest der Zeichenkette zur ckgegeben.
tr           tr ///
             Ersetzen von Zeichen bzw. Zeichenklassen
uc           uc ausdruck
             Umwandlung aller Kleinbuchstaben aus ausdruck in Gro buchstaben
uc rst       uc rst ausdruck
             wie uc, jedoch wird nur der erste Buchstabe in eine Gro buchstaben umgewandelt
y            y///
             vgl. tr///
       1.3.2. Felder, Listen und Hashs.
delete       delete ausdruck
             L schen eines Wertes aus einem Hash. Ausdruck mu dabei die Form $array{$key} besitzen. Zur ckgege-
             ben wird der gel schte Wert oder nichts, wenn kein Wert gel scht wurde
each         each hash
             Liefert ein zweielementiges Array, das nach jedem Aufruf das jeweils n chste Schl ssel-/Wert-Paar des
             Hashs liefert. Ist kein Wert verf gbar, liefert die Funktion ein Null-Array.
exists       exists $hash{$key}
             Test, ob in einem Hash ein Schl sselfeld existiert
grep         grep Block, List
             grep ausdruck, list
             Auswertung jedes Elements von List und liefert eine Liste mit Werten, f r die der Ausdruck wahr ist.
join         join ausdruck, list
             F gt alle Elemente aus List zu einer Zeichenkette zusammen, wobei ausdruck das Trennzeichen angibt
keys         keys hash
             Liefert ein Array mit den Schl sselwerten eines Hash-Feldes
map          map block. list
             map ausdruck, list
             Auswertung des Ausdrucks oder Blocks f r jedes Element einer Liste. Das Ergebnis ist eine Liste mit den
             ausgewerteten Elementen
pop          pop array
             entfernt das letzte Element des Feldes array und gibt dieses zur ck
push         push array, list
             alle Elemente von Liste werden an das Feld array angehangen
reverse      reverse list
             Umkehren der Reihenfolge aller Elemente von List
shift        shift array
             entfernt das erste Element des Feldes array und gibt es als Ergebnis zur ck
splice       splice array, o set, laenge, list
             splice array, o set, laenge
             splice array, o set
             Splice dient zum Ersetzen oder Entfernen von Elementen eines Arrays.
                                             1.4. KONTROLLSTRUKTUREN                                            7

sort         sort subname list
             sort block list
             sort list
             Sortieren einer Liste. Ohne Angabe von block oder subname wird einfach aufsteigend sortiert. Bei der
             Angabe von Block oder subname kann die Sortierreihenfolge ver ndert werden.
unpack       unpack Template, ausdruck
             Umkehrung zur Funktion pack
unshift      unshift array, list
             f gt die Elemente von list an den Anfang eines Array ein und liefert die neue Zahl von Elementen
values       values hash
             liefert ein Array mit allen Werten eines Hash-Feldes
       1.3.3. Numerische Funktionen.
abs          abs ausdruck
             liefert den absoluten Betrag zur ck
atan2        atan2 x,y
             liefert den Arcus Tangens von x/y im Bereich von -PI bis PI
cos          cos ausdruck
             cos
             liefert den Cosinus von Ausdruckbzw. $_
exp          exp ausdruck
             exp
             liefert das Ergebnis von ex
int          int ausdruck
             int
             liefert den Ganzzahlanteil von ausdruck oder $_
log          log ausdruck
             log
             liefert den Logarithmus naturalis von ausdruck bzw. $_
rand         rand ausdruck
             rand
             Bildung einer Zufallszahl (Gleitkommazahl) im Bereich von 0 bis ausdruck. Ohne Angabe von Ausdruck
             wird eine Zahl zwischen 0 und 1 zur ckgeliefert.
sin          sin expr
             sin
             Berechnung des Sinus von Ausdruck bzw. $_
sqrt         sqrt ausdruck
             sqrt
             Berechnung der Wurzel von Ausdruck bzw. $_
srand        srand ausdruck
             srand
             Initialisierung des Zufallszahlengenerators
                                          1.4. Kontrollstrukturen
       1.4.1. Nachgestellte if- bzw. unless-Anweisung. Zur bedingten Ausf hrung eines Kommandos dient die
nachgestellte if- bzw. unless-Anweisung:
     Anweisung if ( Bedingung ) ;
     Anweisung unless ( Bedingung );
     Bei einem if wird die Anweisung dann ausgef hrt, wenn das Ergebnis der Bedingung wahr ist. Bei einem unless
wird die Anweisung ausgef hrt, wenn die Bedingung nicht wahr ist.
Beispiel: #!/usr/bin/perl
            print Geben Sie eine Zahl ein: ;
            $input = <STDIN>;
            $input = $input * -1 if ($input < 0);
Beispiel: #!/usr/bin/perl
            print Geben Sie eine Zahl ein: ;
            $input = <STDIN>;
            $input = $input * -1 unless ($input > 0);
     1.4.2. Vorgestellte if-Anweisung. Das allgemeines Syntaxdiagramm der vorgestellten if-Anweisung sieht wie
folgt aus:
Syntax: if ( Bedingung) {
            ... Anweisungen;
                                              1.4. KONTROLLSTRUKTUREN                                                   8

            } else {
            ... Anweisungen;
            }]
Nach der einleitenden Bedingung folgt ein Anweisungsblock, der ausgef hrt wird, wenn die Bedingung wahr ist. Ist
ein else-Zweig angegeben, so wird dieser Zweig ausgef hrt, wenn die Bedingung falsch ist. Die Angabe des else-Zweigs
ist optional.
     Gruppierungen sind mit Hilfe des optionalen Parameters elsif m glich. Das Syntaxdiagramm sieht wie folgt aus:
Syntax: if (Bedingung) {
            ... Anweisungen;
            } elseif (Bedingung2) {
            ... Anweisungen;
            } elsif (Bedingung3) {
            ... Anweisungen;
            } ]]
              else {
            ... Anweisungen;
            }]
    1.4.3. Die switch-Anweisung. Eine switch-Anweisung im Stil klassischer Programmiersprachen existiert in
Perl nicht. Man kann sich aber mit Hilfe eines Labels und dem Kommando last eine hnliche Konstruktion erzeugen:
Beispiel: #!/usr/bin/perl
            ...
            SWITCH: {
            if (Bedingung) { Anweisungen; last SWITCH;}
            if (Bedingung) { Anweisungen; last SWITCH;}
            if (Bedingung) { Anweisungen; last SWITCH;}
            }
Das Kommando last SWITCH beendet hierbei den Block und sorgt f r einen Sprung zur Marke SWITCH.
    1.4.4. Die while-Schleife. Die Syntax der while-Schleife ist analog zu den klassischen Programmiersprachen.
Dabei wird die Schleife solange ausgef hrt, wie die Bedingung wahr ist.
Syntax: while (Bedingung) {
           ... Anweisungen;
           }
Beispiel: #!/usr/bin/perl
           $anfang = 1;
           while ($anfang < 10) {
           print $anfang;
           $anfang++;
           }
    1.4.5. Die until und do... until-Anweisungen. Die Syntax der until-Schleife ist der Syntax der while-Schleife
sehr hnlich. Jedoch wird die until-Schleife solange ausgef hrt, wie die Bedingung falsch ist. Die until-Schleife ist eine
kopfgesteuerte Schleife.
Syntax: until (Bedingung) {
           ... Anweisungen;
           }
Die do... until-Anweisung wird ebenfalls solange abgearbeitet, wie die Bedingung falsch ist. Jedoch handelt es sich
hierbei um eine fu gesteuerte Schleife.
Syntax: do {
           ...Anweisungen;
           ...
           } until (Bedingung);
    1.4.6. Die for-Anweisung. Die for-Anweisung entspricht von der Syntax der for-Anweisung in der Program-
miersprache C/C++.
Syntax: for (Initialisierung; Bedingung; Abschlu ) {
           ... Anweisungen;
           }
                                             1.6. REGUL RE AUSDR CKE                                               9
    1.4.7. Die foreach-Anweisung. Ein Spezialfall der for-Anweisung in bezug auf Listen ist die foreach-Anweisung.
Dabei wird als ein Parameter eine Liste angegeben, aus der bei jedem Durchlauf ein Element entnommen wird und in
eine Variable (die Laufvariable) kopiert wird.
Syntax: foreach Variable] (Liste) {
           ... Anweisungen;
           }
    1.4.8. Next, Last und Redo. Die Kommandos Next, Last und Redo dienen der Beein ussung der Abarbeitung
von Bl cken.
NEXT       Bei Auftreten des Kommandos NEXT wird sofort mit einem neuen Durchlauf der Schleife begonnen.
LAST       Mit LAST kann die Abarbeitung einer Schleife unmittelbar abgebrochen werden, unabh ngig von der
           Schleifenbedingung
REDO       Die Schleife wird erneut begonnen, ohne da die Schleifenbedingung nochmals getestet wird.

                                        1.5. Textsuche und Ersetzung
   Eine St rke von Perl sind die M glichkeiten zur Textsuche und Ersetzung, die durch die Angabe von regul ren
Ausdr cken hinreichend m chtig sind.
    1.5.1. Der TR//-Operator. Der tr//-Operator, oder auch der alternative y//-Operator, wirken auf die Varia-
ble $_. Der Aufruf erfolgt nach dem Schema:
    tr/suchliste/ersetzungsliste/optionen
    Der Parameter suchliste ist dabei eine Zusammensetzung von Zeichen oder Zeichenklassen und der Parameter
ersetzungsliste gibt den zu ersetzenden Text an. Als R ckgabewert liefert tr die Zahl der ver nderten Zeichen. Wenn
/ bereits Teil der Suchkette ist, kann tr alternativ mit einem anderen Trennzeichen aufgerufen werden. Wird kein
Ersetzungstext angegeben, liefert tr die Zahl der in der Kette vorhandenen Zeichen zur ck, die dem Suchmuster
entsprechen.
Beispiel: #!/usr/bin/perl
            $_ = Dieser Text ist ganz lustig. ;
            $neu = tr /a-z/A-Z/;
            print Neu: $neu: $_ ;
Optionen: c- Es wird das Komplement der Suchliste angegebenen Zeichen gebildet
            d-alle Zeichen, die in der Suchliste enthalten sind und keine Entsprechung in der Ersetzungsliste haben,
            werden gel scht.
            s-Folgen von Zeichen, die zu gleichen Zeichen ersetzt wurden, werden zu einem Zeichen zusammengefa t.
     1.5.2. Suchen mit //. Als logische Suchfunktion innerhalb von Zeichenketten dient //. Dabei wird in $_ nach
dem Suchmuster gesucht und, wird das Muster gefunden, eine 1 zur ckgegeben. Wird die Zeichenkette nicht gefunden,
ist das Ergebnis leer.
Beispiel: #!/usr/bin/perl
            $_= Morgen ist Wochenende ;
            $erg=/ist/;
            print $erg;
Optionen: g- sucht in der Zeichenkette nach allen Vorkommen
            i-Suche ohne Unterscheidung der Gro -Kleinschreibung
            m-Behandelt die Eingabe als mehrzeilige Eingabe. Dabei wird bei der Suche nach oder $ jedes Auftreten
            gefunden.
            o-Suchmuster wird nur einmal gelesen (keine Angabe von Variablen im Suchtext)
            s-Eingabe wird als einzeilige Zeichenkette behandelt
            x-verwendet erweiterte regul re Ausdr cke
    1.5.3. Der s//-Operator. Der s//-Operator stellt eine Erweiterung des //-Operators dar, bei dem nicht nur
gesucht, sondern auch ersetzt werden kann.
Beispiel: #!/usr/bin/perl
            $_= Morgen ist Wochenende ;
            $erg=s/ist/neu/;
            print $erg;

                                           1.6. Regul re Ausdr cke
   Zur Angabe von regul ren Ausdr cken k nnen verschiedenste Varianten benutzt werden, wie die nachfolgende
Tabelle im berlick zeigt:
                                              1.6. REGUL RE AUSDR CKE                        10
       1.6.1. Zeichen und Klassen.
.            beliebiges Zeichen au er Newline
x            ein x
Wort         ein Wort
  xyz]       es tri t x, y oder z zu
  a-z]       es tre en alle Buchstaben zwischen a und z zu
(Wort)       eingefangenes Wort, wird in $i gespeicherung und mit \i im Ausdruck verwendet
(?:Wort)     Gruppieren, aber nicht speichern
x(?=y)       x wenn y folgt, Klammern speichern nicht
x(?|y)       x wenn y nicht folgt
\w           Wortzeichen
\w+          ganzes Wort (Wortzeichen mit folgendem Leer oder Satzzeichen)
\W           Nicht Wortzeichen, Satzzeichen, Leerzeichen etc
\s           Leerraum: Leerzeichen, Tabulator, Newline
\S           alles, was kein Leerraum ist (Buchstaben, Zi ern, etc)
\b           Wortgrenze
\d           Zi er
       1.6.2. Quanti zierer.
*            vorangegangener Ausdruck beliebig oft, aber auch gar nicht
+            vorangegangener Ausdruck beliebig oft, mindestens einmal
?            vorangegangener Ausdruck h chstens einmal
 4]          vorangegangener Ausdruck genau 4 Mal
 2,7]        vorangegangener Ausdruck 2 bis 7-Mal
       1.6.3. Sonderzeichen.
|            oder, auf Zeichen oder Gruppen anwendbar
             Anfang der Zeile oder des Ausdrucks
$            Ende der Zeile oder des Ausdrucks
  x]         alles, was nicht x ist
\            Backslash, nimmt Sonderzeichen die Spezialbedeutung
\L           alle Zeichen bis \E in Kleinbuchstaben
\U           alle Zeichen bis \E in Gro bnuchstaben
\Q           alle Zeichen bis \E mit \ sch tzen
\E           Ende von \U, \L, \Q
       1.6.4. Operatoren und Modi zierer.
m//          suche
s///         suche und ersetze
s###         suche und ersetze, benutze aber # als Trenner
//g          jedes Vorkommen nden
//i          Gro -Kleinschreibung ignorieren
//m          Multiline-Mode
//s          Singleline-Mode
//sm         kombiniert logische Zeichen und Newline
//x          Kommentare und Leerzeichen im Suchenteil erlaubt
s///e        kann im Ersetzungsteil einen Ausdruck erst evaluieren und dann ersetzen
       1.6.5. Spezialvariablen.
$1           Wert der ersten einfangenden Klammer, nur im Ersetzungsteil verwenden
\1           R ckbezug auf die erste einfangende Klammer
$&           letzter gefundener Tre er
$            Text nach dem Tre er
$`           Text vor dem Tre er
$+           Tre er der letzten einfangenden Klammer
$/           Zeilentrenner