<< Strings und Zahlen | Inhalt | Referenzen >> |
Noch einmal der Substitute-Operator s/// | ... und nochmal /// | Funktionen im Substitute-Operator |
Bereits im Grundkurs haben wir den Substitute-Operator s/// kennengelernt. Hier kommen noch ein paar Besonderheiten. Der Rückgabewert dieses Operators ist die Anzahl der Ersetzungen, die gemacht wurden ...
ergibt ...
s/// liefert also undef zurück, falls nichts ersetzt wurde, und ansonsten die Anzahl der Ersetzungen - egal ob die global-Option gesetzt wurde oder nicht.
Hingegen der Match-Operator arbeitet etwas anders. Dieser liefert nicht die Anzahl des Vorkommens zurück, sondern die 'gematchten' Substrings als Array:
Hier wird nicht die Anzahl, sondern das Gefundene zurückgeliefert ... (finde ich ganz gut, hätte bei s/// auch gemacht werden können). Verzichtet man auf die Option g wird nicht der gefundene String zuruückgeliefert, sondern eine 1, falls etwas gefunden wurde und sonst undef.
Verwendet man Klammern im regulären Ausdruck, so werden die Auswertungen der Klammern sukzessive zurückgegeben.
Klar? Also gut, zuerst wird das Ergebnis xx/11 der ersten Klammer (das wäre $1) des ersten Treffers in das Array geschrieben; anschließend die der zweiten (xx) etc. Nach dem ersten Treffer wird der zweite abgearbeitet (ya/12, ya); etc. Die Teile außerhalb der Klammern wird nicht an das Array übergeben.
Bis jetzt haben wir schon recht effektiv Teilstrings ersetzt mit Hilfe des Substitute-Operators. Doch das folgende Konsrukt öffnet uns Tür und Tor für alles, was man machen will. Wir kombinieren s/// mit einem Funktionsaufruf im zweiten Teil des Operators.
Mit der Option e im s-Operator muss im 2. Teil ein Term stehen, der berechnet werden muss. Also grob gesprochen Perlcode. Darum ist es möglich dort auch einen Funktionsaufruf (im Beispiel &month($2)) unterzubringen. Somit kann man den zu ersetzenden Teilstring auch beliebig handhaben!
Noch einmal der Substitute-Operator s/// | ... und nochmal /// | Funktionen im Substitute-Operator |
<< Strings und Zahlen | Inhalt | Referenzen >> |
© 2001-2003 Perl, Lehrstuhl Mathe II, Uni Bayreuth |