Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste Überarbeitung Beide Seiten der Revision | ||
perl [09.01.2016 12:32] marc angelegt |
perl [14.01.2016 12:08] marc regexp |
||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
... | ... | ||
} | } | ||
+ | |||
+ | Oder mit shift | ||
+ | |||
+ | sub routine($$) { | ||
+ | my $parameter1 = shift; | ||
+ | my $parameter2 = shift; | ||
+ | ... | ||
+ | } | ||
+ | ===== Systemaufruf ===== | ||
+ | |||
+ | ==== system ==== | ||
+ | |||
+ | Bei system() bleibt das Perl-Programm während des Ausführung des Kommandos stehen, pausiert sozusagen. | ||
+ | |||
+ | # calling ' | ||
+ | system(" | ||
+ | |||
+ | # better way of calling the same command | ||
+ | system(" | ||
+ | | ||
+ | ===== Sleep ===== | ||
+ | |||
+ | Sleep lässt das Script für < | ||
+ | |||
+ | sleep(10); | ||
+ | |||
+ | ===== FHEM Befehle aus perl ausführen ===== | ||
+ | |||
+ | fhem "< | ||
+ | |||
+ | |||
+ | ===== regexp ===== | ||
+ | |||
+ | Regular Expressions - oder, auf Deutsch, reguläre Ausdrücke - dienen dazu, einen Text auf bestimmte Zeichenfolgen zu überprüfen und diese dann - bei Bedarf - zu manipulieren. Diese Suchbegriffe können durch die regexp-Syntax sehr variabel gehalten werden. | ||
+ | Sie sind Programmiersprachen-unabhängig, | ||
+ | |||
+ | |||
+ | | ||
+ | |||
+ | Die - für uns vorerst wichtigen - Metazeichen sind: | ||
+ | |||
+ | | ||
+ | •^ steht für den Textanfang. /^abc/ ist nur dann wahr, wenn der Text mit abc beginnt. | ||
+ | •$ steht für das Textende. /abc$/ ist nur dann wahr, wenn der Text mit abc endet. | ||
+ | •\b steht für eine Wortgrenze. abc ist wahr, wenn abc als eigenes Wort im Text auftaucht ("abc def ...") und falsch, wenn abc nur Teil eines Wortes ist ( "abcd ef..." ) | ||
+ | •\B ist das Gegenteil von \b. abc ist falsch, wenn abc als eigenes Wort im Text auftaucht ("abc def ...") und wahr, wenn abc nur Teil eines Wortes ist ( "abcd ef..." ) | ||
+ | •| dient als oder-Verknüpfung. /abc|xyz/ ist sowohl bei abc als auch bei xyz wahr. | ||
+ | |||
+ | 2. Wildcards, Suchbereiche: | ||
+ | •. ( der Punkt ) steht für ein beliebiges Zeichen: /ab.c/ ist wahr, wenn im Text zB abxc, ab1c oder ab c steht. Es ist nicht wahr, wenn zwischen ab und c mehr als ein Zeichen steht. | ||
+ | •[...] Eckige Klammern definieren einen Zeichenbereich, | ||
+ | Es können auch ganze Zeichen-Bereiche abgedeckt werden: | ||
+ | |||
+ | - [A-Z] trifft auf alle Großbuchstaben zu | ||
+ | - [a-z] trifft auf alle Kleinbuchstaben zu | ||
+ | - [0-9] trifft auf alle Ziffern zu | ||
+ | |||
+ | •^ Jetzt wird's etwas irritierend, | ||
+ | |||
+ | 3. Wiederholungsangaben: | ||
+ | | ||
+ | •* steht für beliebig oft oder gar nicht. Beispiel: /abc[x]*d/ ist wahr, wenn zwischen abc und d gar nichts oder ein oder mehrere x stehen - es ist falsch, wenn irgendein anderes Zeichen dazwischen steht. | ||
+ | •+ hat im Prinzip die gleiche Wirkung wie das *, nur das in diesem Fall die Suchzeichen mindestens einmal auftreten müssen. Beispiel: /.+/ ist wahr, wenn mindestens ein beliebiges Zeichen vorhanden ist. | ||
+ | •? bedeutet: Kann da sein, muss aber nicht. Im Prinzip also wieder wie das *, nur das hier die maximale Trefferlänge 1 beträgt. | ||
+ | •{n1,n2} schränkt den Grössenspielraum ein: n1 steht für die Mindestanzahl Treffer, n2 für die Maximalanzahl. Die Maximalanzahl kann bB weggelassen werden. Mit Komma ( " | ||
+ | |||
+ | 4. Maskieren | ||
+ | Es kann natürlich vorkommen, daß mit der regexp Zeichen gesucht werden, die innerhalb der regexp eine eigene Funktion haben ( Beispiel: . - der Punkt. ). Diesen Zeichen wird durch einen vorgestellten Backslash (\. ) die Metazeichen-Funktion genommen und in ein ganz normales Literal umgewandelt. | ||
+ | |||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | Nehmen wir mal an, wir hätten ein riesengrosses Logfile und wollen aus diesem alle IP-Adressen rausfiltern. | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | / | ||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | Nun gut, jetzt wissen wir, daß eine Zeile eine IP_Adresse enthält, wissen aber noch nicht, welche IP-Adresse das ist. Dafür dienen die runden Klammern (...). Alle Treffer - seien es nun Literale oder (umgesetzte) Metazeichen - die innerhalb dieser runden Klammern stehen, werden an das aufrufende Script übergeben ( $1,$2... bei Perl, bei PHP im angegebenen Zielarray ). Also würde uns die regexp | ||
+ | |||
+ | / | ||
+ | |||
+ | die IP-Adresse in der jeweiligen Variablen zurückliefern. | ||
+ | |||
+ | |||
+ |