The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
  <link rel="SHORTCUT ICON" href="../bilder//pl.ico">
  <title>Suchoperatoren  </title>
 </head>
 <body bgcolor="#ffffff">
  <hr>
  <h1 align="center">Suchoperatoren</h1>
  <table align="center"><tr>
  <td><a href="perl_format.html">  <img src="../bilder//perl_links.gif" alt="[ vorherige Seite ]" width="43" height="30" border="0"></a></td>
  <td><a href="../perl-tutorial.html">  <img src="../bilder//perl_titel.gif" alt="[ Titelseite ]" width="81" height="22" border="0"></a></td>
  <td><a href="perl_inhalt.html">  <img src="../bilder//perl_inhalt.gif" alt="[ Inhalt ]" width="57" height="22" border="0"></a></td>
  <td><a href="perl_index.html">  <img src="../bilder//perl_index.gif" alt="[ Index ]" width="54" height="22" border="0"></a></td>
  <td><a href="perl_reg.html">  <img src="../bilder//perl_rechts.gif" alt="[ n&auml;chste Seite ]" width="43" height="30" border="0"></a></td>
  </tr></table>
  <hr>

  <ul>
<li><a href="#abs1">Ersetzen einzelner Zeichen</a></li>
<li><a href="#abs2">Suchoperator</a></li>
  </ul>
  <a name="abs1"></a><hr>
  <h2 align="center">Ersetzen einzelner Zeichen</h2>
  <hr>
  <p>

Will man bestimmte Symbole durch andere ersetzen (i.a. tritt anstelle
eines Zeichens genau ein anderes), so verwendet man den
Operator
  </p>
  <blockquote>

  <code>$string =~ tr/</code><i>Suchliste</i><code>/</code><i>Ersetzungsliste</i><code>/</code><i>Optionen</i><code>;</code>
  </blockquote>
  <p>

Dabei sind Such- und Ersetzungsliste jeweils Listen aus Symbolen. Beim
Ersetzen wird wie folgt vorgegangen: tritt in <code>$string</code> das
erste Zeichen der Suchliste auf, so wird dieses Zeichen entfernt und
an die Stelle wird das erste Zeichen der Ersetzungsliste gesetzt. Analog
wird jedes Auftreten des zweiten Zeichens der Suchliste
durch das zweite Zeichen der Ersetzungliste ersetzt usw.
  </p>
  <p>

Beispiel:
  </p>
<table align="center" bgcolor="#ffcc99" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ffffcc" border="0" cellpadding="10" width="100%">
<tr><td><code>#!/usr/local/bin/perl&nbsp;-w<br><br>use&nbsp;strict;<br><br>my&nbsp;$s&nbsp;=&nbsp;"--abcd--cde--";<br>print&nbsp;"$s\n";<br><br><font color="#0000cc">$s&nbsp;=~&nbsp;tr/abc/ABC/;</font><br>print&nbsp;"$s\n";<br></code></td></tr></table>
</td></tr></table>
<table align="center" bgcolor="#66cc66" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ccffcc" border="0" cellpadding="5" width="100%">
<tr><td><code>--abcd--cde--<br>--ABCd--Cde--<br></code></td></tr></table>
</td></tr></table>
  <p>

Zur Vereinfachung k&ouml;nnen mittels eines Minuszeichens
"<code>-</code>" auch
Zeichenbereiche angegeben werden (z.B. "alle Kleinbuchstaben"
durch "<code>a-z</code>").
Die Reihenfolge der Zeichen ist dabei durch den Zeichensatz bestimmt,
man sollte sich hier auf Buchstaben und Ziffern beschr&auml;nken.
Will man ein Minus
ersetzen, so mu&szlig; es wegen dieser Sonderbedeutung an Anfang oder Ende von
Such- bzw. Ersetzungliste stehen.
  </p>
  <p>

Tritt ein Zeichen mehrmals in der Suchliste auf, so wird es durch
dasjenige Symbol der Ersetzungliste ersetzt, das als erstes als Partner
auftritt. Ist die Suchliste l&auml;nger als die Ersetzungsliste, so wird
das letzte Zeichen der Ersetzungsliste so oft wiederholt, bis beide Listen
gleich lang sind (die &uuml;berz&auml;hligen Symbole der Suchliste werden
also alle dem letzten Zeichen der Ersetzungsliste zugeordnet). Ist die
Ersetzungsliste leer, so wird der Inhalt der Suchliste dort
eingetragen (dadurch finden zwar keine ersichtlichen Ersetzungen statt,
aber der Operator kann dann zum Z&auml;hlen von Zeichen verwendet werden,
da der R&uuml;ckgabewert die Anzahl der ersetzten Zeichen ist).
  </p>
<table align="center" bgcolor="#ffcc99" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ffffcc" border="0" cellpadding="10" width="100%">
<tr><td><code>#!/usr/local/bin/perl&nbsp;-w<br><br>use&nbsp;strict;<br><br>my&nbsp;$s&nbsp;=&nbsp;"--abcd--cde--";<br>print&nbsp;"$s\n\n";<br><br>(my&nbsp;$t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;<font color="#0000cc">tr/a-c/A-C/</font>;&nbsp;&nbsp;&nbsp;<font color="#006600">#&nbsp;entspricht&nbsp;'tr/abc/ABC/'</font><br>print&nbsp;"$t\n";<br>($t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;<font color="#0000cc">tr/ccc/123/</font>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#006600">#&nbsp;entspricht&nbsp;'tr/c/1/'</font><br>print&nbsp;"$t\n";<br>($t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;<font color="#0000cc">tr/-b/+-/</font>;<br>print&nbsp;"$t\n";<br>($t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;<font color="#0000cc">tr/abcde/xy/</font>;&nbsp;&nbsp;<font color="#006600">#&nbsp;entspricht&nbsp;'tr/abcde/xyyyy/'</font><br>print&nbsp;"$t\n";<br>my&nbsp;$z&nbsp;=&nbsp;($t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;<font color="#0000cc">tr/-//</font>;&nbsp;&nbsp;&nbsp;<font color="#006600">#&nbsp;entspricht&nbsp;'tr/-/-/'</font><br>print&nbsp;"$t&nbsp;($z&nbsp;Minuszeichen&nbsp;in&nbsp;$s)\n";<br></code></td></tr></table>
</td></tr></table>
<table align="center" bgcolor="#66cc66" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ccffcc" border="0" cellpadding="5" width="100%">
<tr><td><code>--abcd--cde--<br><br>--ABCd--Cde--<br>--ab1d--1de--<br>++a-cd++cde++<br>--xyyy--yyy--<br>--abcd--cde--&nbsp;(6&nbsp;Minuszeichen&nbsp;in&nbsp;--abcd--cde--)<br></code></td></tr></table>
</td></tr></table>
  <p>

Anmerkung zur Zuweisung: Im obigen Beispiel wird jeweils der Variablen <code>$t</code>
zun&auml;chst der  Inhalt von <code>$s</code> zugewiesen, anschlie&szlig;end erfolgt dann
die Ersetzung (nur in <code>$t</code>!). Die vorletzte Zeile zeigt noch, wie man den
R&uuml;ckgabewert der Ersetzungsoperation erh&auml;lt.
  </p>
  <p>

Optionen:
  </p>
  <ul>
   <li>
<code>c</code> ("<i>complement</i>")    <p>

    Diese Option bedeutet f&uuml;r die Suchliste soviel wie "alle Zeichen
    au&szlig;er...".
        </p>
    <p>

    Beispiel:
        </p>
<table align="center" bgcolor="#ffcc99" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ffffcc" border="0" cellpadding="10" width="100%">
<tr><td><code>#!/usr/local/bin/perl&nbsp;-w<br><br>use&nbsp;strict;<br><br>my&nbsp;$s&nbsp;=&nbsp;"abcd?%(1)---23ABCDEF4&nbsp;xxx5\n";<br>print&nbsp;"$s\n";<br><br>$s&nbsp;=~&nbsp;tr/0-9/./<font color="#0000cc">c</font>;<br>print&nbsp;"$s\n";<br></code></td></tr></table>
</td></tr></table>
<table align="center" bgcolor="#66cc66" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ccffcc" border="0" cellpadding="5" width="100%">
<tr><td><code>abcd?%(1)---23ABCDEF4&nbsp;xxx5<br><br>.......1....23......4....5.<br></code></td></tr></table>
</td></tr></table>
    <p>

    Hier werden alle Zeichen, die keine Ziffern sind, durch Punkte ersetzt.
        </p>
   </li>
   <li>
<code>s</code> ("<i>squash down</i>")    <p>

    Werden aufeinander folgende Zeichen durch das gleiche Symbol ersetzt, so
    wird bei Verwendung dieser Option dieses Symbol nur einmal gesetzt.
        </p>
    <p>

    Erweiterung des obigen Beispiels:
        </p>
<table align="center" bgcolor="#ffcc99" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ffffcc" border="0" cellpadding="10" width="100%">
<tr><td><code>#!/usr/local/bin/perl&nbsp;-w<br><br>use&nbsp;strict;<br><br>my&nbsp;$s&nbsp;=&nbsp;"abcd?%(1)---23ABCDEF4&nbsp;xxx5\n";<br>print&nbsp;"$s\n";<br><br>$s&nbsp;=~&nbsp;tr/0-9/./c<font color="#0000cc">s</font>;<br>print&nbsp;"$s\n";<br></code></td></tr></table>
</td></tr></table>
<table align="center" bgcolor="#66cc66" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ccffcc" border="0" cellpadding="5" width="100%">
<tr><td><code>abcd?%(1)---23ABCDEF4&nbsp;xxx5<br><br>.1.23.4.5.<br></code></td></tr></table>
</td></tr></table>
   </li>
   <li>
<code>d</code> ("<i>delete</i>")    <p>

    Diese Option verhindert die Verl&auml;ngerung der Ersetzungsliste, falls
    die Suchliste k&uuml;rzer ist. Dies bewirkt, da&szlig; die &uuml;berz&auml;hligen
    Zeichen der Suchliste gel&ouml;scht werden.
        </p>
    <p>

    Beispiel:
        </p>
<table align="center" bgcolor="#ffcc99" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ffffcc" border="0" cellpadding="10" width="100%">
<tr><td><code>#!/usr/local/bin/perl&nbsp;-w<br><br>use&nbsp;strict;<br><br>my&nbsp;$s&nbsp;=&nbsp;"--abcd--cde--";<br>print&nbsp;"$s\n\n";<br><br>my&nbsp;$t;<br>($t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;tr/abcde/xy/;&nbsp;&nbsp;<font color="#006600">#&nbsp;entspricht&nbsp;'tr/abcde/xyyyy/'</font><br>print&nbsp;"$t\n";<br>($t&nbsp;=&nbsp;$s)&nbsp;=~&nbsp;tr/abcde/xy/<font color="#0000cc">d</font>;<br>print&nbsp;"$t\n";<br></code></td></tr></table>
</td></tr></table>
<table align="center" bgcolor="#66cc66" border="0" cellpadding="2" width="80%"><tr><td>
<table bgcolor="#ccffcc" border="0" cellpadding="5" width="100%">
<tr><td><code>--abcd--cde--<br><br>--xyyy--yyy--<br>--xy----<br></code></td></tr></table>
</td></tr></table>
   </li>
  </ul>
  <p>

Anstelle der Schr&auml;gstriche k&ouml;nnen im Ersetzungsoperator auch andere Zeichen
gesetzt werden, wobei Klammern gesondert behandelt werden. Au&szlig;erdem kann
(in Anlehnung an den Ersetzungsoperator in <i>sed</i>) anstelle von
"<code>tr</code>"
auch "<code>y</code>" stehen.
  </p>
<p align="right"><a href="perl_suche.html">[Seitenanfang]</a></p>
  <a name="abs2"></a><hr>
  <h2 align="center">Suchoperator</h2>
  <hr>
  <p>

Eine der besonderen St&auml;rken von Perl liegt in der Verwendung sogenannter
"regul&auml;rer
Ausdr&uuml;cke"
(<i>regular expressions</i>).
Mit deren Hilfe lassen sich beispielsweise Zeichenketten nach bestimmten
Teilstrings durchsuchen, wobei der regul&auml;re Ausdruck wie eine Art
Schablone wirkt und die Stelle gesucht wird, wo dieses Muster zum ersten
Male pa&szlig;t.
  </p>
  <p>

Der einfache Suchoperator,
der regul&auml;re Ausdr&uuml;cke verwendet, sieht allgemein so aus:
  </p>
  <blockquote>

  <code>$string =~ m/</code><i>Regexp</i><code>/</code><i>Optionen</i><code>;</code>
  </blockquote>
  <p>

Hier wird die Zeichenkette in <code>$string</code> danach durchsucht, ob sich
der regul&auml;re Ausdruck "<i>Regexp</i>" an irgendeiner
Stelle darin anwenden l&auml;&szlig;t. Der R&uuml;ckgabewert
ist "wahr" (<i>true</i>), falls dies zutrifft, sonst "falsch"
(<i>false</i>). Verwendet man anstelle von
"<code>=~</code>" den Operator "<code>!~</code>", so ist
der R&uuml;ckgabewert
genau entgegengesetzt: <i>wahr</i> bei erfolgloser Suche.
  </p>
  <p>

Diejenige Zeichenkette, die auf das Suchmuster pa&szlig;t, wird - sofern
die Suche erfolgreich verl&auml;uft - in der speziellen Variablen
"<code>$&amp;</code>" gespeichert.
  </p>
  <p>

Statt der Schr&auml;gstriche ("<code>/.../</code>") k&ouml;nnen
auch einige
andere Zeichen benutzt werden, sofern es sich dabei nicht um alphanumerische
Symbole (Buchstaben, Ziffern, Unterstrich) oder Leerzeichen (<i>space</i>,
<i>newline</i>, <i>tab</i>,...) handelt; verwendet man Schr&auml;gstriche,
kann das "<code>m</code>" am Anfang weggelassen werden.
  </p>
  <p>

Erl&auml;uterungen, was regul&auml;re Ausdr&uuml;cke sind und wie sie verwendet
werden, finden sich in den nachfolgenden Abschnitten.
  </p>
<p align="right"><a href="perl_suche.html">[Seitenanfang]</a></p>
  <hr>
  <table align="center"><tr>
  <td><a href="perl_format.html">  <img src="../bilder//perl_links.gif" alt="[ vorherige Seite ]" width="43" height="30" border="0"></a></td>
  <td><a href="../perl-tutorial.html">  <img src="../bilder//perl_titel.gif" alt="[ Titelseite ]" width="81" height="22" border="0"></a></td>
  <td><a href="perl_inhalt.html">  <img src="../bilder//perl_inhalt.gif" alt="[ Inhalt ]" width="57" height="22" border="0"></a></td>
  <td><a href="perl_index.html">  <img src="../bilder//perl_index.gif" alt="[ Index ]" width="54" height="22" border="0"></a></td>
  <td><a href="perl_reg.html">  <img src="../bilder//perl_rechts.gif" alt="[ n&auml;chste Seite ]" width="43" height="30" border="0"></a></td>
  </tr></table>
  <hr>
  <table width="100%"><tr>
    <td align="left"><i>Autor: 
       <a href="mailto:Eike.Grote@web.de">Eike&nbsp;Grote</a></i>
    </td>
    <td align="right"><i>Version: 2.05 (24.1.2012)</i>
    </td>
  </tr></table>
 </body>
</html>