Perl Programmierkurs für absolute Anfänger Entwickler: Larry Wall backronyms: Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister erste Perl-Programme ursprüngliches Anwendungsgebiet: Textdateien durchforsten und bearbeiten Informationen gewinnen und Berichte erstellen Philosophie: there's more than one way to do it (TMTOWTDI) make easy tasks easy and difficult tasks possible Caren Brinckmann Sommersemester 2005 http://www.coli.uni-saarland.de/~cabr/teaching.php WWW: www.perl.com Programmierkurs für absolute Anfänger – Sitzung 2 Unser erstes Programm START Grundaufbau eines Programms Ein Programm besteht aus einer Abfolge von Anweisungen (statements). Die Anweisungen werden in der Reihenfolge, in der sie im Programmtext auftauchen, ausgeführt. Im einfachsten Fall enthält das Programm keine Schleife und keine bedingte Verzweigung → linearer Kontrollfluss. Nach Abarbeitung der letzten Anweisung endet das Programm. Das Programm HalloWelt.pl besteht aus nur einer einzigen Anweisung. Diese Anweisung ruft die eine Ausgabefunktion mit einem bestimmten Argument auf, nämlich einer Zeichenkettenkonstanten. Erstelle eine Datei mit dem Namen HalloWelt.pl und folgendem Inhalt: Ausgabe: Hallo Welt! # Ausgabe: "Hallo Welt!" print "Hallo Welt!\n"; STOP Dieses Programm wird ausgeführt mit folgendem Befehl: perl HalloWelt.pl Programmierkurs für absolute Anfänger – Sitzung 2 2 Zeichenketten Programmierkurs für absolute Anfänger – Sitzung 2 3 Benutzung von eingebauten Funktionen Zeichenkettenkonstante Hallo Welt!\n ändert ihren Wert nicht. Zeichenkette (String) ensteht, indem einzelne Zeichen in Anführungszeichen " eingeschlossen werden. \n kodiert ein einziges Zeilentrennzeichen (newline) → die aktuelle Zeile wird beendet, und eine neue wird begonnen. Backslash \ entwertet das nachfolgende Zeichen und gibt ihm eine spezielle Bedeutung. Wenn ein Backslash oder Anführungszeichen ausgegeben werden sollen, so müssen sie selbst "entwertet" werden: \\ bzw. \" Programmierkurs für absolute Anfänger – Sitzung 2 1 Um eine Funktion aufzurufen, wird ihr Name hingeschrieben. Ausgabefunktion print erhält die auszudruckende Zeichenkette als Argument In den meisten Programmiersprachen müssen die Argumente von Funktionen in Klammern gesetzt werden, z.B. print("Hallo Welt!\n"); 4 In Perl sind die Klammern fakultativ! Programmierkurs für absolute Anfänger – Sitzung 2 5 Trennung von Anweisungen Leerraum Jede Anweisung muss mit einem Semikolon ; abgeschlossen werden. Eine Anweisung kann in einer Zeile stehen oder über mehrere Zeilen verteilt werden. Es können prinzipiell auch mehrere durch ; getrennte Anweisungen in einer Zeile stehen. Guter Programmierstil: Jede Anweisung in einer eigenen Zeile. Der Perl-Interpreter zerlegt das Programm zunächst in kleinste syntaktische Einheiten: Tokens. Im Programm HalloWelt.pl sind das die drei Tokens print, "Hallo Welt!\n" und ; Vor und hinter jedem Token ist beliebig viel Leerraum (whitespace) erlaubt: Leerzeichen, Zeilentrennzeichen und Tabulatorzeichen. Leerraum kann ganz ausgespart werden, es sei denn, die beiden Tokens ergeben aneinandergeschrieben ein neues Token. Guter Programmierstil: Die einzelnen Tokens durch ausreichend Leerraum leicht erkennbar machen! Programmierkurs für absolute Anfänger – Sitzung 2 6 Programmierkurs für absolute Anfänger – Sitzung 2 Fehler und Warnmeldungen Kommentare In Perl beginnt jede Kommentarzeile mit einem # Der Perl-Interpreter ignoriert alle Kommentarzeilen. Mit Kommentaren macht man das Programm für andere und für sich selbst (!) lesbarer. Sinnvoll: Mehrere Kommentarzeilen zu Beginn des Programms, die beschreiben Syntaktische Fehler, etwa der Tippfehler prinnt, werden vom Interpreter direkt beim Aufruf erkannt. Der Interpreter gibt eine oder mehrere Fehlermeldungen mit Angabe der Zeilennummer aus, in der er den Fehler bemerkt hat. Semantische Fehler kann der Interpreter nicht erkennen! Beispiel: Das Programm soll "Hallo Welt!" ausgeben, gibt aber "Hello world!" aus. Häufig sind die ausführlichen Warnungen des Interpreters hilfreich bei der Fehlersuche: perl -w HalloWelt.pl Name und e-mail des Programmierers welche Eingabedaten das Programm benötigt was das Programm macht wie das Format der Ausgabe aussieht typischer Programmaufruf (ggf. mit den benötigten Argumenten) Versionsnummer (bei Programmen, die man mehrfach verändert) Außerdem: Kommentar zu Beginn jedes Anweisungsblocks! Jede Zeile kommentieren, die sich nicht von selbst erklärt. Programmierkurs für absolute Anfänger – Sitzung 2 Programmierkurs für absolute Anfänger – Sitzung 2 8 Variablen (1) skalare Variable: eindeutiger Name (Bezeichner) Variable erhält ihren Wert über Zuweisungen Programm kann über den Bezeichner auf den jeweiligen Wert zugreifen Bezeichner sinnvollen Bezeichner wählen, z.B. eurobetrag statt zahl Bezeichner muss mit einem Buchstaben oder _ anfangen deutsche Sonderzeichen dürfen nicht vorkommen Groß- und Kleinschreibung wird unterschieden Programmierkurs für absolute Anfänger – Sitzung 2 10 kann nur einen einzigen Wert speichern Wert: eine Zahl oder eine Zeichenkette beginnt in Perl stets mit $ Beispiele: $zaehler $eingabezeile $zaehler2 $vokal_1 Variablen in Perl sind ungetypt, d.h. sie können zu einem bestimmten Zeitpunkt eine Zahl und zu einem anderen Zeitpunkt eine Zeichenkette enthalten. 9 Variablen (2) Variable: Speicherplatz für veränderliche Werte 7 Variablen in Perl müssen nicht deklariert werden, d.h. sie entstehen genau in dem Moment, in dem ihnen zum ersten Mal ein Wert zugewiesen wird. Programmierkurs für absolute Anfänger – Sitzung 2 11 Literale Zuweisungen Literal: konstantes Objekt Stringliterale: Die Variable auf der linken Seite des Zuweisungsoperators erhält den Wert auf der rechten Seite. Was darf auf der rechten Seite stehen? kodieren konstante Strings (Zeichenketten) Perl: gebildet durch Einschließen von Zeichen in einfache oder doppelte Anführungszeichen Beispiele: "Hallo Du" 'Hallo' Zuweisungen von Werten an Variablen erfolgen durch den Zuweisungsoperator = numerische Literale: ganze Zahlen, z.B. -255 Dezimalzahlen, z.B. 1.609 Programmierkurs für absolute Anfänger – Sitzung 2 12 Beispiel: Zuweisungen Programmierkurs für absolute Anfänger – Sitzung 2 Arithmetische Ausdrücke setzen sich zusammen aus: Zahlenkonstanten numerische Variablen arithmetische Operatoren: + - * / $x="Gandalf der Graue"; print "Jetzt ist x gleich $x\n"; $Zauberer_Nr_1 = $x; print "$Zauberer_Nr_1\n"; $Zauberer_Nr_1 = "Gandalf der Weiße"; print "$Zauberer_Nr_1\n"; 14 Konkatenationsoperator: . $vorname = "Caren"; $nachname = "Brinckmann"; $name = $vorname . " " . $nachname; Konkatenation durch Substitution in Stringliteralen: $name = "$vorname $nachname"; Programmierkurs für absolute Anfänger – Sitzung 2 16 15 Standardeingabe und -ausgabe runde Klammern → Präzedenz Programmierkurs für absolute Anfänger – Sitzung 2 Konkatenation: Aneinanderhängen von zwei Zeichenketten Modulo-Operator % berechnet den ganzzahligen Rest einer ganzzahligen Division, z.B. 9 % 2 = 1 $x = 1; $y = 2; $mittelwert = ($x + $y) / 2; print "Mittelwert von x und y: $mittelwert\n"; Konkatenation von Zeichenketten 13 Arithmetische Ausdrücke $x=42; print "$x\n"; Programmierkurs für absolute Anfänger – Sitzung 2 Literal: $zaehler = 1; Variable: $zaehler1 = $zaehler2; komplexer Ausdruck: $kilometer = $meilen * 1.609; Skalare Variablen können ihre Werte zur Laufzeit des Programms aus der Standardeingabe beziehen. Normalfall: Programm wartet auf eine Eingabe durch den Benutzer (Ende: Return-Taste) Der Inhalt der Eingabezeile wird in einen speziellen Eingabestrom – die Standardeingabe STDIN – geschrieben. Das Programm kann diesen Eingabestrom Zeile für Zeile lesen und den Inhalt einzelner Zeilen in Variablen abspeichern. Die print Funktion sendet die auszugebenden Daten an die Standardausgabe STDOUT. Programmierkurs für absolute Anfänger – Sitzung 2 17 Funktion chomp Beispiel: Eingabe lesen ## Programm, dass die Eingabezeile des ## Benutzers auf dem Bildschirm ausgibt print "Deine Eingabe: "; $eingabezeile = <STDIN>; print "Ich wiederhole: $eingabezeile"; Achtung: Das Zeilentrennzeichen \n gehört mit zu den eingegebenen Zeichen (verursacht durch das Drücken der Return-Taste). Programmierkurs für absolute Anfänger – Sitzung 2 print "Name: "; $name = <STDIN>; chomp $name; print "Alter: "; $alter = <STDIN>; chomp $alter; $maximalpuls = 220 - $alter; print "Maximalpuls von $name beträgt $maximalpuls.\n"; 18 Funktion length chomp schneidet das letzte Zeichen einer Zeichenkette ab, wenn es ein Zeilentrennzeichen ist, ansonsten lässt sie die Zeichenkette unverändert. Programmierkurs für absolute Anfänger – Sitzung 2 Bedingte Anweisungen length bestimmt die Anzahl der Zeichen eines Strings (seine Länge) und gibt diesen Wert zurück. if Anweisung wird ausgeführt, wenn eine Bedingung erfüllt ist if – else print "Vorname: "; $vorname = <STDIN>; chomp $vorname; print "Nachname: "; $nachname = <STDIN>; chomp $nachname; $laenge_name = length($vorname) + length($nachname); print "Dein Name hat $laenge_name Buchstaben.\n"; Programmierkurs für absolute Anfänger – Sitzung 2 19 zwei Alternativen if – elsif – else mehr als zwei Alternativen 20 if Programmierkurs für absolute Anfänger – Sitzung 2 21 if – else Syntax: if (Ausdruck) { Anweisungsblock } Syntax: if (Ausdruck) { Anweisungsblock_1 } else { Anweisungsblock_2 } $vorname = <STDIN>; chomp $vorname; $nachname = <STDIN>; chomp $nachname; $laenge_vorname = length($vorname); $laenge_nachname = length($nachname); if ($laenge_vorname > $laenge_nachname) { print "Vorname ist länger als Nachname.\n"; } Programmierkurs für absolute Anfänger – Sitzung 2 if ($laenge_vorname > $laenge_nachname) { print "Vorname ist länger als Nachname.\n"; } else { print "Vorname ist nicht länger als Nachname.\n"; } 22 Programmierkurs für absolute Anfänger – Sitzung 2 23 if – elsif – else Beispiel: if – elsif – else Syntax: if (Ausdruck_1) { Anweisungsblock_1 } elsif (Ausdruck_2) { Anweisungsblock_2 } elsif (Ausdruck_3) { Anweisungsblock_3 ... } else { Anweisungsblock_default } if ($laenge_vorname > $laenge_nachname) { print "Vorname ist länger als Nachname.\n"; } elsif ($laenge_vorname == $laenge_nachname) { print "Vor- und Nachname sind gleich lang.\n"; } else { print "Nachname ist länger als Vorname.\n "; } Achtung: Der arithmetische Gleichheitsoperator ist ==. Nicht zu verwechseln mit dem Zuweisungsoperator =. else-Block ist fakultativ! Programmierkurs für absolute Anfänger – Sitzung 2 24 Programmierkurs für absolute Anfänger – Sitzung 2 25