Perl-Referenz ,G. Willee, Programmieren in der CL-2.
IKP,Uni Bonn,WS 2003-2004
Verfasst von Andrei Beloous.
14.12.2002.
zurück zum Studium/IKP zur Startseite
Unterfunktionen, Unterprogramm oder Subfunktionen sind selbst erstellte Funktionen,
um bestimmte Abläufe stets wieder verwenden zu können, ohne jedes Mal alle Zeilen wiederholt
im Quelltext aufführen zu müssen.Die Markierung von eigenen Unterfunktionen erfolgt durch ein
vorgestelltes Und-Zeichen(&).
Der Code für Unterfunktionen sieht folgendermassen aus :
sub name {Anweisungsblock }
>>>zurük zum Inhaltsverzeichnis
chdir ("/windows");
$bs = chomp($string);
$bs = chop($satz);
die "Datei nicht gefunden";
$string = "tagaus tagein tagung"
$index = index($string, 'tag');
$string = "tagaus tagein tagung"
$rindex = rindex($string, 'tag');
last SCHLEIFE if($eingabe >0);
$length = length($string);
next SCHLEIFE if($eingabe>0);
open (OUT,">vertikal.txt") or die "cannot open vertikal.txt\n";
print pop(@liste);
print "Hallo";
print "$variable";
print $variable;
$text ='Dies ist ein Satz.';
$text =q(Dies ist ein Satz.");
$text ="Dies ist ein Satz.";
$text =qq(Dies ist ein Satz.);
@list = ("String1", "String2");
@list = qw(String1 String2);
$string = reverse($string);
$string = "tagaus tagein tagung"
$rindex = rindex($string, 'tag');
print shift(@liste);
@liste=split(//,$var);
$var=substr("Hallo Perl", 3, 6);Ergebnis: lo Per
print $var;
>>>zurük zum Inhaltsverzeichnis
If-Anweisung: gewisse Anweisungen werden ausgeführt, wenn eine Bedingung wahr ergibt.
Oder wir fuuml;hren Anweisungen aus, wenn eine Bedingung nicht zutrifft.
if-Anweisung:
if(zwingend)
elsif(optional, mehrmalig)
else(optional, einmalig)
unless - die einfache Negation der if-Anweisung.
Syntax:
if (Bedingung) {Anweisungsblock}
elsif(weitere Bedingung) {Anweisungsblock}
elsif(weitere Bedingung) {Anweisungsblock}
else {Anweisungsblock}
unless (Bedingung){Anweisungsblock}
Beispiel:
$zahl = 10;
if($zahl > 5 && $zahl<9) {print "Zahl ist größer 5.\n";}
elsif($zahl>9){print "Zahl ist größer 9.\n";}
else {print "Zahl kleiner 6.\n";}
unless($alter>100)
{
print "Mögliches Alter.\n";
}
>>>zurük zum Inhaltsverzeichnis
Eine Schleife wird so lange durchgeführt, bis die Bedingung nicht mehr wahr ist.
1)while-Schleife
Die while-Schleife wird solange durchlaufen, wie die Bedingung wahr ist.
Syntax:
while (Bedingung) {Anweisungsblock}
Z.B. while($i<10){print...}-die Bedingung ist wahr , solange $i kleiner als 10 ist.
2)until-Schlefe
Die Negation der while-Schleife.
Aktion bis Bedingung eintrifft.
Syntax (identisch mit der der while-Schleife):
until (Bedingung) {Anweisungsblock}
3)for-Schleife
Wiederholbedingung.Die for-Schleife läuft eine fest vorgegebene Anzahl oft durch.
Die Anzahl der Durchläufe wird traditionell von $i gespeichert.
Syntax:
for (Zähler;Wiederholbedingung;Änderung) {Anweisungsblock}
z.B.for($i=0;$i<10;$i++) {Anweisungsblock}
4)foreach-Schleife.
Foreach-Schleife läuft alle Elemente eines Arrays einmal durch.
Syntax:
foreach VARIABLE (ARRAY oder LISTE) {Anweisungsblock}
Beispiel:
@array = (1,2,3,4,5);
foreach (@array) {}
>>>zurük zum Inhaltsverzeichnis
Um einen wahren oder falschen Wert zu erzeugen , werden verschiedene Vergleichsoperatoren benötigt.
Vergleich | Zahl | Zeichenkette |
---|---|---|
gleich | == | eq <equal> |
ungleich | != | ne <not equal> |
kleiner als | < | lt <less than> |
größer als | > | gt <greater than> |
kleiner/gleich | <= | le <less/equal> |
größer/gleich | >= | <greater/equal> |
>>>zurük zum Inhaltsverzeichnis
Reguläre Ausdrücke sind Zeichenmuster, die mit einer Zeichenkette (String) nach Regeln
verglichen werden zum Zweck der weiteren Bearbeitung des Strings.
Aktionen bei regulären Ausdrücken:
Der zu untersuchende String wird jeweils durch =~ mit dem regulärem Ausdruck verknüpft
(bzw.durch !~, wenn auf Nichtübereinstimmung getestet wird). Wird kein String explizit angegeben,
wird der Speicher $_ ausgewertet.
Beispiel:
$ex(string) = 'Hausherr';
$ex=~/sh/;(regulärer Ausdruck, "das Suchmuster") #es wird "wahr" beim
#Finden des Musters ausgegeben, sonst "falsch"
$ex =~/sh/i;# ist wahr, wenn auf $ex der Wert 'SH', 'Sh', 'sh' oder 'sH'Position des Suchmusters auf dem String: Die Angabe von '^' vor dem Suchmuster besagt, dass der String mit dem folgenden Zeichen
# gefunden wird.
Metazeichen:
Als Wildcard dient in der Regel der '.'. Will man ein fordefiniertes Zeichen
in einem Muster als reguläres Zeichen suchen, muss dieses mit einem '\' markiert werden,
ein Punkt also als '\.'.
Quantifyer (Auswahl)
* ->Zeihen oder Muster kommt beliebig oft vor
? ->Zeihen oder Muster kommt ein- oder keinmal vor
+ ->Zeihen oder Muster kommt einmal oder beliebig oft vor
$ex=~/a.*b/ # ist wahr, wenn 'a', beliebige Zeichen und 'b' vorkommen
Gruppieren von Mustern
geschieht durch Klammerung
$ex=~/(ab)+(xyz)?/;#ist wahr, wenn 'ab' mindestens einmal vorkommt
#und ggf. 'xyz'
Alternativen:
werden durch '|' markiert
$ex=~/(ab)|(xyz)/;# ist wahr, wenn entweder 'ab' oder 'xyz' vorkommt.
Zeichenklassen:
Zeichenklassen werden in regulären Ausdrücken durch '[' und ']' definiert.
Ein Match ist wahr, wenn mindestens eines der definierten Elemente auf dem String
angetroffen wird.Sollen alle Zeichen außer den definierten Zeichen gefunden werden,
wird ein'^' vor die Zeichenliste gesetzt.
$ex=~/[gerd]/i;#ist wahr, wenn mindestens eines der aufgeführten
# Zeichen einmal in $ex erhalten ist, wobei die
#Groß-/kleinschreibung ignoriert wird.
$ex=~/[^gerd]/i;#ist wahr,wenn keines der aufgeführten Zeichen in $ex
#erhalten ist.
Anwendungen beim Mustervergleich und bei der Musterersetzung
Match (prüft Vorkommen des Musters, man kann auch den Operator 'm' voransetzen)
Beispiele:
$v=~m/gerd/i; #ist wahr, wenn auf $v der Wert 'GERD', 'GeRd', 'gerd'
#etc gefunden wird
#ist identisch mit
$=~/gerd/i;
$v=~/gerd$/i; #ist wahr, wenn $v mit dem Wert 'GERD', 'GeRd', 'gerd'
#etc endet
$v=~m/^gerd/i; #ist wahr, wenn $v mit dem Wert 'GERD', 'GeRd', 'gerd'
#etc beginnt
$a!~/^zu/ #ist wahr, wenn $a NICHT mit 'zu' beginnt
$ein=~/[mdclxvi]/i; #ist wahr, wenn der String mindestens eines der
#in '[...]' angegebenen Zeichen enthällt
$ein=~/[^mdclxvi]/i;#ist wahr, wenn der String mindestens ein Zeichen
#enthällt, das nicht zu den in '[...]'
# angegebenen Zeichen gehört
Substitute(Operator 's', ersetzt das erste Vorkommen des linken Teils des angegebenen Musters
durch den rechten Teil, kann auch leer sein)
Bei Angabe von 'g'( für globally)
werden ALLE Vorkommen ersetzt
Beispiele:
$ein=~(s/i/1/gi);#Alle Vorkommen von 'i' und 'I' werden durch '1' ersetzt.
$a=~s/en$/-en/; #'en' am Ende von $a wird durch '-en' ersetzt
$a=~s/zu/-zu-/; # das erste Vorkommen von 'zu' auf $a wird durch '-zu-'
#ersetzt.
$c=~s/^m//i; #ist wahr, wenn am Anfang von $c ein 'm' oder 'M'
#gefunden wird;Aktion:Abschneiden dises Zeichen
#(Erstzen durch Nullstring)
Transliterate(keine Anwendung eines regulären Ausdrucks! Operator 'tr', ersetzt entsprechende
Elemente des linken Teils durch die des rechten Teils)
Beispiel:
$ein=~tr/iIvVxXlLcCdDmM/11223344556677/;
#hatdenselben Effekt wie
$ein=~tr/ivxlcdmIVXLCDM/12345671234567/;
#Ersetzt jedes 'i' oder 'I' durch '1', jedes
#'v' durch '2'etc
Optionen für das Suchen und Suchen/Ersetzen(Substitution)
Option | Bedeutung |
---|---|
i | case-insensitive: Die Suche des Suchmusters erfolgt ohne Berücksichtigung der Groß- und Kleinschreibung. Dadurch kann WORT gefunden werden, wenn nach Wort gesucht wird. |
g | global: eher interessant für die Substitution. Es wird nicht nur das erste gefundene Suchmuster im String ersetzt und danach abgebrochen, sondern alle. |
m | multi-line: |
s | sigle-line: |
x | extended: |
o | compile once: |
e | Das Ersetzmuster wird zuerst evaluiert, so können auch mathematische Operationen oder Funktionen verwendet werden. Man kann auch zwei oder mehrere e schreiben, je nach dem, wie oft das Ersetzmuster evaluiert werden soll. |
>>>zurük zum Inhaltsverzeichnis
© Andrey Belous, 2004.