Einführung in die Programmierung mit Perl - HPK

Werbung
Dipl. Ing. (FH) Hans-Peter Kiermaier
Einführung in die
Programmierung
mit Perl
1
(C)2009, Kiermaier
Allgemeines
Perl steht für
Practical Extraction and Report Language
aus Wikipedia:
"Erfinder ist Larry Wall (*1954). Er ist, abgesehen von
seinen Fähigkeiten als Programmierer, bekannt für
seinen Humor, seinen Sprachwitz und seinen feinen
Sinn für Ironie: Er gewann zweimal den IOCCCWettbewerb (International Obfuscated C Code
Contest) für den undurchsichtigsten C-Quelltext."
2
Perl steht für Practical Extraction and Report Language und ist eine vom
Amerikaner Larry Wall entwickelte Skriptsprache. Perl kommt aus dem UNIX
Bereich, und wurde ursprünglich für die Adminstration und Konfiguration von
verteilten Computer eingesetzt. Mittlerweile hat sich diese Skriptsprache aber
auch auf anderen Plattformen etabliert. Heute gibt es Perl-Interpreter für Unix,
MS-DOS, alle Windows Plattformen, MacOS, Amiga, BeOS, NextOS, VMS,
OS/2, AS400, ...
Perl wird als universelles Werkzeug verwendet. Mit dieser Skriptsprache können
Probleme aus den verschiedensten Bereichen gelöst werden: CGI,
Webprogrammierung, Netzwerkadministration, Datenbankanbindungen sowie
umfangreiche Unterstützung für das Durchsuchen von beliebigen Dateien und
Extrahierung von Informationen aus diesen Dateien (daher der Name "Extraction
and Report Language").
2
(C)2009, Kiermaier
Wie beliebt ist Perl?
3
In der Beliebtheit steht C und C++ ganz oben. Obwohl es sich um eine nicht ganz
einfach zu erlernende Sprache handelt.
C wird hauptsächlich zur Systemprogrammierung verwendet, z.B. für die
Programmierung von Betriebssystemen und Mikrocontrollern. Allerdings wird mit
C auch Anwendungssoftware entwickelt.
Viele andere Programmiersprachen haben sich in Sachen Design und Syntax an
C orientiert, z.B. C#, Java, Perl oder PHP.
C ist eine prozedurale Programmiersprache (d.h. Programme werden in kleinere
Prozeduren aufgeteilt) und hat eine Code-Blockstruktur.
C++ hat gleichzeitig die Eigenschaften einer High-Level und einer Low-LevelProgrammiersprache. Dank dieser Kombination ist eine sehr effiziente
Programmierung möglich. C++ wird oft für die Entwicklung von
Anwendungssoftware für Windows und Linux verwendet und ist daneben die
beliebteste Sprache der Spieleprogrammierer
3
(C)2009, Kiermaier
Was braucht man für Perl?
Quellcode in "PL"-Textdatei
#!/usr/bin/perl
-w
print "Hello World!\n";
chomp($ende = <STDIN>);
Perl-Interpreter
(Übersetzer)
BA
B4
CD
B8
CD
48
6C
00
09
21
01
21
61
6F
00
4C
6C
00
Mov
Mov
Int
Mov
Int
db
db
DX,textadr
AH,09
21
AH,4C01
21
"Hal"
"lo"
Übersetzte Zeile
4
Um ein Perl-Programm zu erstellen, ist kaum mehr nötig als nur den Code
einzutippen. Zusätzlich braucht man ein spezielles Programm, das den in einer
"PL"-Datei vorliegenden Code in Maschinensprache übersetzt. Die Anweisungen
in einem Perl-Skript werden meist nicht vollständig kompiliert, sondern von einem
Interpreter beim Aufruf abgearbeitet. Der große Nachteil dieses Prinzips ist die
Geschwindigkeit der Ausführung. Skripts sind nicht so schnell ausführbar wie
kompilierte und gelinkte Programme. Daher eignen sich Skript-Sprachen auch
nur für eher kleine Programme und Anwendungen. Dadurch, dass ein Perl-Skript
interpretiert wird, braucht ein Skript nicht für jede Betriebssystemumgebung neu
kompiliert werden. Damit sind Perl-Skripts problemlos portabel und laufen
überall, wo ein Perl-Interpreter installiert ist.
4
(C)2009, Kiermaier
Wo bekommt man Perl?
„
Auf den Seiten des O‘Reillys Verlag
http://www.perl.com
„
Bei Activestate gibt es sogar ganze
Entwicklerpakete (Perl DevKit 8.0)
http://www.activestate.com
bzw.
http://downloads.activestate.com/ActivePerl/
5
Es empfiehlt sich der Download von ActivePerl für Windows (X86) bei
ActiveState. Das Developerkit ist im Prinzip nur für Enthusiasten.
Auf www.perl.com sind Sie auf den Seiten des O'Reillys Verlag, der auch eine
gute Perl-Dokumentation und wirklich empfehlenswerte Bücher anbietet: z.B.
Programmieren mit Perl, Larry Wall, ISBN 3-89721-144-0, Bei Amazon für 56€.
5
(C)2009, Kiermaier
Hilfreiche Editoren
Notepad++ (komfortabel auch in Deutsch)
http://notepad-plus.sourceforge.net/de/site.htm
Notepad2 (keine Installation erforderlich)
http://www.flos-freeware.ch/notepad2.html
6
Zum Erstellen des Quellcodes empfiehlt es sich Notepad++ oder Notepad2
herunterzuladen und zu installieren. Dies sind Texteditoren, die
Programmiersprachen farblich unterstützen können.
Perl-Skripts können im Prinzip mit jedem ASCII-Editor erstellt und bearbeitet
werden, ideal ist aber ein leistungsfähiger Programmierer-Editor, der sich so
konfigurieren lässt, dass er das Programmieren in Perl optimal unterstützt. Z.B.
Notepad++ ist so ein Editor. Er unterstützt nicht nur Syntax-Highlighting für Perl,
sondern auch HTML, CSS, PHP, ASP, C/C++, Java, JavaSkript und VBSkript,
was für größere Projekte nützlich sein kann. Prinzipiell genügt aber auch das
einfache Notepad aus Windows.
Damit können wir jetzt beginnen, ein erstes Programm zu erstellen.
TIPP: Im Notepad++ kann man das Programm gleich ausprobieren, indem man
F5 bzw. Ausführen wählt. Allerdings verschwindet die Eingabeaufforderung sofort
wieder. Um das zu umgehen kann man in das Fenster "Ausführen" folgende
Zeile schreiben:
cmd.exe /K perl.exe -w "$(FULL_CURRENT_PATH)"
Das "/K" bewirkt, dass das Fenster nicht sofort wieder geschlossen wird. Damit
lassen sich dann Ergebnisse und Fehlermeldungen leicht lesen. Anschließend
muss man das CMD-Fenster selbst schließen. Auf diese Weise hat fast ein
"IDE"-Gefühl (IDE = Integrated Development Environment).
6
(C)2009, Kiermaier
Wie sieht ein Perl-Programm aus?
Kommentare
Perl-Pragmas bzw.
Einbinden von Modulen
globale Deklarationen
Lokale Deklarationen
Prozeduren, Funktionen
Anweisungen
Kommentare
7
Ein Perl-Programm besteht aus:
•Kommentare #
•Deklarationen (= formale Beschreibung aller verwendeten Klassen)
•Anweisungsblöcke { }
•weitere Funktionen
7
(C)2009, Kiermaier
DAS erste Perl-Programm
Im Notepad schreiben Sie die "hello.pl"
Shebang-Zeile:
Speicherort des PerlInterpreters für UNIX
Anweisung den
nachfolgenden Text
auszugeben.
Speichern Sie den Text.
Mit "perl hello.pl" starten.
Oder einfach nur "hello.pl" eingeben
und Eingabetaste drücken
8
Erstellen Sie ein Übungs-Verzeichnis. Dann starten Sie Notepad (Notepad++
bzw. Notepad2) und tippen die Zeilen ab. Speichern Sie den Text unter "hello.pl".
Im Eingabeaufforderungsfenster starten Sie dann den Übersetzungsvorgang mit
"perl hello.pl". Als Ergebnis wird "Hello World!" ausgegeben.
Sie könnten die "hello.pl" auch im Explorer doppelt anklicken, aber das Ausgabefenster würde schneller wieder verschwinden, als Sie es lesen könnten.
Die Anweisung zur Lage des Perl-Interpreters beginnt mit dem Zeichen #! gefolgt von der Pfadangabe. Diese Anweisung wird vor allem von Unix- und Unixkompatiblen Systemen verwertet, und zwar dann, wenn die Perl-Datei auf den
Modus ausführbar gesetzt ist. Die Datei kann dann direkt aufgerufen werden und
startet automatisch den Perl-Interpreter.
Laut Perl-Syntax ist diese erste Zeile, welche die Lage des Perl-Interpreters
angibt, ein Kommentar. Kommentare beginnen in Perl mit dem Gatterzeichen #.
Alles zwischen diesem Zeichen und dem Ende der gleichen Zeile wird vom PerlInterpreter ignoriert. Für mehrzeilige Kommentare müssen alle betroffenen Zeilen
mit einem # beginnen.
Die oben verwendete Funktion print gibt Information auf die Konsole aus. Im
obigen Fall wird der String Hello world! ausgegeben. Zum Abschluss jeder
Anweisung in Perl folgt ein Strichpunkt ;. Da er oft vergessen wird, ist es eine der
häufigsten Fehlerursachen. Interessanterweise kann er auch erst in der nächsten
oder übernächsten Zeile stehen. Sogenannte whitespaces (Leerzeichen, Zeilenumbrüche, Tabulatoren) werden nicht beachtet!
Das geht also auch:
print
"Hello World!"
;
8
(C)2009, Kiermaier
Aufrufoptionen des Perl-Interpreters
Option
-c
-d
-v
-w
Bedeutung
Das Perl-Skript wird nicht ausgeführt, sondern nur auf syntaktische Richtigkeit
überprüft
Das Perl-Skript wird im Debug-Modus ausgeführt. Der Debug-Modus erlaubt
das Austesten des Perl-Skripts.
Gibt die Version und den genauen Stand des Perl-Interpreters aus.
Bewirkt, dass der Perl-Interpreter nicht nur offensichtliche Fehlermeldungen bei
Syntaxfehlern ausgibt, sondern auch Warnungen bei möglichen Fehlern und
logisch zweifelhaften Anweisungsfolgen.
Beispiele:
perl -w hello.pl
perl -c hello.pl
9
Aufrufmöglichkeiten des Perl-Interpreters
Aufrufen kann man den Perl-Interpreter mit einem Perl-Skript, also einer
Textdatei mit Perl-Programmanweisungen. Solche Dateien haben die StandardDateiendung ".pl". Der Perl-Interpreter wird normalerweise einfach mit perl
gestartet. Daneben gibt es noch etliche Optionen beim Aufruf des PerlInterpreters. Die Optionen folgen unmittelbar hinter dem Programmdateinamen
und vor dem Namen des Perl-Skripts (z.B.: perl -c hello.pl).
Option Bedeutung
-c
Das Perl-Skript wird nicht ausgeführt, sondern nur auf syntaktische
Richtigkeit überprüft
-d
Das Perl-Skript wird im Debug-Modus ausgeführt. Der Debug-Modus
erlaubt das Austesten des Perl-Skripts.
-v
Gibt die Version und den genauen Stand des Perl-Interpreters aus.
-w
Bewirkt, dass der Perl-Interpreter nicht nur offensichtliche Fehlermeldungen bei Syntaxfehlern ausgibt, sondern auch Warnungen bei
möglichen Fehlern und logisch zweifelhaften Anweisungsfolgen.
9
(C)2009, Kiermaier
Variablen - $kalare
Zuweisungsoperator
$VarName = Wert / Ausdruck
Datenrichtung
richtig:
falsch:
$kalar = 123
5 = $kalar
$variable = "123"
3 + 5 = $ergebnis
$t = "Hallo"
$t = 3 * 9 = $thoelke
$kalar
ist nicht gleich
$Kalar
10
Skalare - einfache Variablen
Der einfachste Typ in Perl ist die skalare Variable. Skalare Variablen können
Zeichenketten (Strings) und Zahlen speichern. Im Gegensatz zu anderen
Sprachen wird der Datentyp (String oder Zahl) nicht vorher festgelegt und kann
auch jederzeit geändert werden.
Ein Skalar, also eine einfache Variable, beginnt mit dem Dollarzeichen $, gefolgt
von dem Namen der Variablen. Das Dollarzeichen muss immer angegeben
werden, wenn die Variable verwendet wird, egal ob ihr ein Wert zugewiesen wird,
oder ob sie in einer Operation vorkommt.
Ob ein Skalar numerisch oder eine Zeichenkette ist, entscheidet sich erst, wenn
dem Skalar einen Wert zugewiesen oder er in einer Anweisung verwendet wird.
Eine angegebene Zeichenkette muss dabei in Anführungszeichen stehen.
Normalerweise sind das doppelte Anführungszeichen, es sind aber auch
einfache Anführungszeichen erlaubt.
Leerzeichen vor und nach dem Zuweisungsoperator sind nicht erforderlich,
können aber die Leserlichkeit erheblich verbessern!
Achtung! C-Typisch ist die Groß/Kleinschreibung zu beachten! Ein Skalar mit
einem Großbuchstaben am Anfang ist nicht identisch mit einem
bedeutungsgleichen Skalar mit einem Kleinbuchstaben.
10
(C)2009, Kiermaier
Variablen - $kalare
Fehlerhafte Namen:
$Bill Gates = 0; Keine Leerzeichen in Variablennamen
$print = "Hallo"; Schlüsselwörter vermeiden
$lies.das = 5;
Keine Operatoren in Namen
$addiere+1 = 2; auch hier
$myZahl! = 1;
auch hier
$a = 5; $b = 3; Reservierte Bezeichner vermeiden
$_ = "hier"
auch hier (!!!)
$0815 = 3
Ziffern hinterm $ vermeiden (geht aber: Zahlenbasis)
Ordnungsgemäße Bezeichner:
$Bill_Gates = "Rentner" statt Leerzeichen lieber Unterstriche
$ergebnis = 5
aussagekräftige Namen wählen
$Leer = ""
einen leeren Text zuweisen
11
11
(C)2009, Kiermaier
Variablen - $kalare
Strings - Zeichenliterale
Stringliterale:
Zeichenketten (Texte) werden in Anführungszeichen eingeschlossen. Einige Zeichen
beginnen mit einem Backslash und haben eine spezielle Bedeutung:
\a
\n
\r
\t
\b
\"
\'
\\
\$
\@
Akustisches Signal (Bell)
Zeilenvorschub (neue Zeile)
Wagenrücklauf (Anfang der Zeile)
Tabulator
BackSpace (Rückschritt)
Doppeltes Anführungszeichen im Text
Einfaches Anführungszeichen im Text
Ein Backslash-Zeichen
Das Dollar-Zeichen (Skalarzeichen)
Das At-Zeichen (Listenzeichen)
(ASCII 07)
(ASCII 10)
(ASCII 13)
(ASCII 09)
(ASCII 08)
(ASCII 34)
(ASCII 39)
(ASCII 92)
(ASCII 36)
(ASCII 64)
12
Stringliterale
Stringliterale sind unmittelbar angegebene Zeichenketten. Bedingung dafür ist,
dass Sie Zeichenketten in Anführungszeichen einschließen. Für einen größeren
Text können Sie mehrere Zeilen benutzen! Sie werden dann automatisch beim
Kompilieren zu einem Text zusammengezogen (Whitespace wird nicht beachtet).
Einige Zeichen sind so nicht darstellbar und haben spezielle Bedeutungen. Damit
man sie verwenden kann, stellen Sie einfach einen Backslash \ davor. Sie
können an beliebiger Stelle und beliebig oft im Text vorkommen.
12
(C)2009, Kiermaier
Variablen - $kalare
Strings - Zeichenliterale
Beispiel:
13
Übung: Das Hello-World Programm so umschreiben, dass es in eine Variable
geschrieben wird und ein Zeilenvorschub angehängt wird.
Lösung:
Mit \t wird ein Tabulator eingefügt, also "World" erst ein Stück weiter rechts
gedruckt.
Dann werden 2 Leerzeilen ausgegeben, weil "\n\n" zwei Zeilenvorschübe
erzwingt. Zusätzlich kommt der 'unsichtbare' Zeilenvorschub im Quelltext.
Nach der dritten Ausgabezeile erfolgt ein weiterer Zeilenvorschub.
Dies ist in anderen Programmiersprachen nicht erlaubt: Eine Zeichenkette darf
nur in Perl über eine Zeile hinausgehen.
13
(C)2009, Kiermaier
Variablen - $kalare
Strings - Hochkommas
Hochkommas sind die wörtliche Form ohne Interpretation des Inhalts:
print 'Hello \t World\n\n'; ergibt also
In der Print-Anweisung können mehrere solcher String-Literale und
Variablen durch Kommatas getrennt angegeben werden:
$t = 'da draussen';
$leer = ' ';
print 'Hallo', $leer, $t, '\n';
14
Es gibt zwei Möglichkeiten Zeichenketten bzw. Stringliterale zu schreiben: mit
Anführungszeichen "" oder mit Hochkommas ' '.
Texte, die in Hochkommas eingeschlossen sind, werden nicht interpretiert. Alle
Inhalte sind wirklich nur Text! Das bedeutet, dass zum Beispiel '\n' keinen
Zeilenvorschub bewirkt, sondern genau so ausgegeben wird.
14
(C)2009, Kiermaier
Variablen - $kalare
Strings - Anführungszeichen
Anführungszeichen ermöglichen die Interpretation des Inhalts:
print "Hello \t World\n\n" ergibt also
Variablen werden dabei durch ihren Inhalt ersetzt (interpretiert):
$t = 'da draussen';
$leer = " ";
print "Hallo$leer$t\n";
15
Durch Anführungszeichen können Zeichenketten nach ihrem Inhalte untersucht
und eventuell interpretiert werden. Dadurch verändert sich die Ausgabe zum Teil
dramatisch.
Werden zum Beispiel Variablen in Zeichenketten mit Anführungszeichen
eingeschlossen, so werden statt der Namen die Inhalte dieser Variablen
ausgegeben!
(Anmerkung: In Perl-Büchern steht statt Interpretation oft Interpolation)
15
(C)2009, Kiermaier
Variablen - $kalare
Strings - Backticks
Backticks sind links gerichtete Hochkommas und werden als DOS-Befehl
interpretiert. Das heißt, das Betriebssystem führt den Inhalt dieser Zeichenketten als Befehl aus.
Ausgabe der aktuelle System-Uhrzeit, ohne sie zu ändern:
print `echo. | time`;
Ausgabe des Laufwerknamens von C:
print `vol c:`;
Inhalt des Laufwerks U: in Datei schreiben:
print `dir u:\ > u:\inhalt.txt`;
Sofortige Formatierung einer Diskette in A: ohne (Sicherheits-)Rückfrage:
print `echo. | format a:`;
16
16
(C)2009, Kiermaier
Variablen - $kalare
Zahlen
Ganze Zahlen:
$kalarzahl = 5;
# ist eigentlich 5,00000000000000
use integer;
# pragma stellt "echte" Ganzzahlen ein
$n = 2047;
$betrag = 1_234_567;
# 1000er Trennzeichen
$c = "123"
# Zahl in Textdarstellung
$erg = "123" + "456"
# Ergebnis 579 trotz Zeichenketten!
Fließkommazahlen:
$kalarzahl =123.45;
$pi = 3.14159265358979;
$betrag = 0.123_456_7;
$z = .1234567
$c = 2.99792456E8
# ein Punkt statt Komma!
# so viele Stellen hat der C-Typ double
# 1000er Trennzeichen auch hinterm Komma
# die Null vorm Komma kann auch entfallen
# oder klein 2.99e8
17
Standardmäßig sind Zahlen in Perl Fließkommazahlen mit doppelter Genauigkeit
(C-Typ double). Also wenn man 5 schreibt, ist es in Wirklichkeit 5.000000000.
Will man "echte" Integerzahlen verwenden, muss man das Pragma "use integer"
verwenden.
Daten in Perl sind nicht "getypt". Mit eine Zeichenkette, die nur aus gültigen
numerischen Zeichen besteht (z.B. "123"), kann man problemlos numerische
Operationen durchführen. Ebenso ist es möglich numerische Werte wie
Zeichenketten behandeln.
17
(C)2009, Kiermaier
Variablen - $kalare
Andere Zahlenbasis
Zahlenbasis oktal (durch führende 0):
Wertevorrat 0,1,2,3,4,5,6,7
Stellenwertigkeit: 8³ 8² 8¹ 8º = 512 64
$kalarzahl = 077;
#
$z = 01234567;
8
7
1
7 = 63d
Zahlenbasis hexadezimal (durch führendes 0x):
Wertevorrat 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Stellenwertigkeit: 16³ 16² 16¹ 16º = 4096 256 16 1
$kalarzahl = 0x3BC;
#
3
11 12 = 956d
$z = 0x400;
Zahlenbasis binär (durch führendes 0b):
Wertevorrat 0,1
Stellenwertigkeit: 2³ 2² 2¹ 2º = 8 4 2 1
$kalarzahl = 0b0101;
#
1 0 1 = 5d
$z = 0b01100001;
18
Zahlen sind standardmäßig im Dezimalsystem angegeben. Falls man andere
Zahlensysteme (Basis) braucht, kann man der Zahl ein Kürzel voranstellen.
Eine führende Null sagt, es handelt sich um eine Zahl im Achtersystem (Oktal).
Das heißt, es können nur Ziffern von 0 bis 7 vorkommen.
Eine führende Null und ein anschließendes X legen eine Hexadezimalzahl fest.
Hier können Ziffer von 0 bis 9 und die Buchstaben A bis F vorkommen.
Eine Null und B schließlich legen Binärzahlen fest, in der nur die Ziffern 0 und 1
vorkommen können.
18
(C)2009, Kiermaier
Variablen - $kalare
Konsolen-Eingabe
$eingabe = <STDIN>;
Beispiele:
# Ausgabe: "Wie heisst du? "
# Eingabe: nach $eingabe
chomp(variable/liste);
chop(variable/liste);
# Ausgabe: Gesamttext
Beispiele:
# $t mit Text füllen
# Zeilenvorschub in $t entf.
# Ausgabe: Gesamttext
19
Statt einer Variablen einen Wert oder Ausdruck zuzuweisen, kann man auch von
der Konsole einlesen. Dazu benutzt man den Datei-Handle <STDIN>
(üblicherweise in Großbuchstaben). Dadurch hält der Interpreter an und erwartet
vom Benutzer eine Eingabe. Sobald die Eingabetaste gedrückt wird, fährt der
Interpreter fort und weist die Eingabe der Variablen zu. Anzumerken ist dabei,
dass das Eingabezeichen mit übergeben wird!
Um dieses u.U. störende Eingabezeichen zu entfernen, kann man die Funktion
CHOMP() benutzen. Damit werden alle nachfolgenden Zeilenvorschübe aus der
Variablen entfernt. Achtung! Weil die Funktion chomp() auch eine Anweisung
ist, kann sie keine Textliterale (=Konstanten: "abc") bearbeiten. Als Funktion ($n
= chomp..) liefert sie selbst nur die Anzahl der entfernten Zeichen zurück.
Genaugenommen entfernt chomp() am Ende eines Strings die Zeichenkette, die
in der Variablen "$/" steht (Standardwert: "\n"). Ist "$/" leer, so werden alle
Zeilenvorschübe abgeschnitten. Im Gegensatz dazu entfernt CHOP()
grundsätzlich das letzte Zeichen.
Übung:
Das erste Programm mit der Eingabe so umschreiben, dass die Zeilenvorschübe
entfernt werden und bei der Ausgabe wieder alles in einer Zeile steht.
Lösung:
19
(C)2009, Kiermaier
Operatoren
Arithmetische Operatoren
++, - **
!, ~, \, +, *, /, %, x
+, -, .
Inkrement (Erhöhen um 1), Dekrement (Vermindern um 1)
Potenz
Unäre Operatoren (not, Komplement, positiv, negativ)
Multiplikation, Division, Restwert (Modulo), Vervielfachung
Addition, Subtraktion, Konkatenation
Beispiele:
$zahl = $zahl + 1;
$zahl++;
$zahl = ++$x;
$zahl = $x++;
$y = $x**2 + 2*$x + 1;
$ah = -5**2;
$d = 1025 % 256;
$e = "Ergebnis = ".$wert
# Der Inhalt von $zahl wird um eins erhöht
# wie oben
# (präfix) $x um eins erhöht, Ergebnis in $zahl
# (postfix) akt. $x in $zahl, dann $x erhöht
# $y erhält den Wert von x²+2x+1
# $ah wird -25 (Potenz vor Vorzeichen)
# $d wird 1 (1025:256 = 4 Rest 1)
# Ergebnis und $wert werden als ein Text nach
# $e geschrieben
20
20
(C)2009, Kiermaier
Operatoren
Arithmetische Operatoren
Beispiel:
21
Übung: Schreiben Sie ein Programm, das zur Eingabe von x auffordert und dann y = x² + 2x + 1
berechnet und das Ergebnis ausgibt.
Lösung:
Übung: Fordern Sie zur Eingabe eines Eurobetrags auf und geben Sie dann den DM-Betrag aus
(1€ = 1.95583DM). Benutzen Sie Variablenzwang (strict).
Lösung:
21
(C)2009, Kiermaier
Operatoren
Zuweisungsoperatoren
Variable = Variable op Wert;
kurz:
ZOP
=
+=
-=
*=
/=
%=
**=
<<=
>>=
Variable zop Wert;
Typ
Gleichheit
Inkrement um Wert
Dekrement um Wert
Multiplikation mal Wert
Division durch Wert
Rest Division durch Wert
Potenz hoch Wert
Bitweise nach links
Bitweise nach rechts
Beispiel
$zahl = 1;
$zahl += 10;
$zahl -= 2;
$zahl *= 5;
$zahl /= 9;
$zahl %= 3;
$zahl **= 2;
$zahl <<= 2;
$zahl >>= 3;
Ergebnis
1
11
9
45
5
2
4
16 (d.h. x 2²)
2 (d.h. / 2³)
22
Leider ist auch erlaubt: $zahl1 = $zahl2 = 5 (Beide Variablen bekommen den
Wert 5). Aber hierbei die Datenrichtung beachten! Zahlenliterale (Konstanten)
können nicht mit anderen Werten 'gefüllt' werden (siehe Folie Variablen).
22
(C)2009, Kiermaier
Operatoren
Zuweisungsoperatoren
ZOP
Typ
Beispiel
$text = "Hallo";
Ergebnis
.=
x=
String-Konkatenation
String-Vervielfältigung
$text .= " du";
$text x= 2;
"Hallo du"
"Hallo duHallo du"
&=
|=
^=
Bitweises Und
Bitweises Oder
Bitweises Xor
$zahl = 0x55;
$zahl &= 0xA5;
$zahl |= 0xAA;
$zahl ^= 0xFF;
5 (0x5)
175 (0xAF)
80 (0x50)
Logisches Und
Logisches Oder
$zahl = true;
$zahl &&= true;
$zahl ||= false;
true
true
&&=
||=
23
23
(C)2009, Kiermaier
Funktionen
Integrierte mathematische Standardfunktionen
abs (wert)
Absolutwert bilden (pos. Betrag einer Zahl)
print abs(-5.179);
Ergebnis: 5.179
int (zahl)
Ganze Zahl bilden (Nachkommaanteil entfällt!)
print int(5.179);
Ergebnis: 5
print int(-5.179);
Ergebnis: -5 (korrekt wäre -6)
hex (String) Hexedezimalstring in Dezimalzahl umwandeln
print hex('FFFF');
Ergebnis: 65535
oct (String) Oktalstring in Dezimalzahl umwandeln
print oct('7654');
Ergebnis: 4012
24
Es gibt eine Reihe von mathematischen Funktionen, die in Perl bereits integriert
sind und die man benutzen kann. Darüberhinaus können über das POSIX-Modul
weitere Funktionen genutzt werden.
Leider hält sich Perl nicht an einen allgemeinen Funktionsbegriff nach dem ein
Argument in Klammer angegeben sein muss. In Perl stehen Funktionen völlig
willkürlich manchmal mit Klammern, manchmal ohne Klammern.
Die hier genannten mathematischen Funktionen kommen zum großen Teil ohne
Klammern aus. Sie sollten sich aber daran gewöhnen Klammern für die
Argumente zu benutzen!
Generisches Runden mit der Int-Funktion:
Da die Int-Funktion eigentlich nur ein Fix() ausführt, also nur Nachkommastellen
entfernt, muss man zum Runden zwischen positiven und negativen Argumenten
unterscheiden.
Jeweils auf 3 Nachkommastellen gerundet:
Für positive Argumente: $erg = int($zahl * 1000 + 0.5)/1000
Für negative Argumente: $erg = int($zahl * 1000 – 0.5)/1000
Übung:
Schreiben Sie ein kleines Programm, dass zur Eingabe einer (positiven)
Fließkommazahl und der Nachkommastellen auffordert und dann das gerundete
Ergebnis ausgibt.
Lösung:
24
(C)2009, Kiermaier
Funktionen
Integrierte mathematische Standardfunktionen
exp (wert)
Exponentialfunktion ewert
print exp (1);
Ergebnis: 2.718281828..
log (wert)
nat. Logarithmus Ln(wert)
print log (2.718281828); Ergebnis: 0.99999999. .(=1)
Beliebige Basis: Log(wert)/Log(Basis)
z.B. Dekadischer Logarithmus:
print log(1000)/log(10); Ergebnis: 3
sqrt (wert)
Quadratwurzel
print sqrt(16);
Ergebnis: 4
25
Übung:
Schreiben Sie ein Programm, das zur Eingabe einer Zahl und einer Basis
auffordert und dann daraus den Logarithmus zur Basis berechnet und ausgibt.
Lösung:
25
Herunterladen