Perl Unser erstes Programm Grundaufbau eines Programms

Werbung
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
Herunterladen