Scriptorientierte Programmiertechnik Perl
|
|
- Silke Brandt
- vor 8 Jahren
- Abrufe
Transkript
1 Scriptorientierte Programmiertechnik Perl (Revision 47) Prof. Dr.-Ing. Torsten Finke FOM Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
2 Überblick Klausur Literatur Arbeitsumgebung Perl Programmierung Mehr Scriptprogrammierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
3 Überblick Klausur Literatur Arbeitsumgebung Perl Programmierung Mehr Scriptprogrammierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
4 Überblick Klausur Literatur Arbeitsumgebung Perl Programmierung Mehr Scriptprogrammierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
5 Überblick Klausur Literatur Arbeitsumgebung Perl Programmierung Mehr Scriptprogrammierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
6 Überblick Klausur Literatur Arbeitsumgebung Perl Programmierung Mehr Scriptprogrammierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
7 Klausur Klausur Formalia Dauer 120 Minuten keine Hilfsmittel Formvorschriften verbindliche Hinweise beachten leserlich schreiben Korrekturrand beachten nur Vorderseiten beschreiben nicht mehr als eine Aufgabe pro Blatt bearbeiten Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
8 Klausur Klausur Formalia Dauer 120 Minuten keine Hilfsmittel Formvorschriften verbindliche Hinweise beachten leserlich schreiben Korrekturrand beachten nur Vorderseiten beschreiben nicht mehr als eine Aufgabe pro Blatt bearbeiten Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
9 Klausur Klausur Formalia Dauer 120 Minuten keine Hilfsmittel Formvorschriften verbindliche Hinweise beachten leserlich schreiben Korrekturrand beachten nur Vorderseiten beschreiben nicht mehr als eine Aufgabe pro Blatt bearbeiten Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
10 Klausur Klausur Inhalte Inhalt komplett relevant kein Repetitorium Auswahlklausur Schwerpunkt auf Verständnis Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
11 Klausur Klausur Inhalte Inhalt komplett relevant kein Repetitorium Auswahlklausur Schwerpunkt auf Verständnis Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
12 Klausur Klausur Inhalte Inhalt komplett relevant kein Repetitorium Auswahlklausur Schwerpunkt auf Verständnis Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
13 Klausur Klausur Inhalte Inhalt komplett relevant kein Repetitorium Auswahlklausur Schwerpunkt auf Verständnis Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
14 Literatur Literatur Schwartz, Randal L., Tom Phoenix: Learning Perl. O Reilly & Associates, 2008, ISBN: a Wall, Larry, Tom Christiansen, Jon Orwant: Programming Perl. O Reilly, Christiansen, Tom, Nathan Torkington: Perl Kochbuch. Beispiele und Lösungen für Perl-Programmierer. O Reilly & Associates, 2004, ISBN: Conway, Damian: Object Oriented Perl. Manning Publications. Conway, Damian: Perl Best Practices. O Reilly, 2005, ISBN: a diese Foliensammlung orientiert sich stark an Learning Perl Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
15 Arbeitsumgebung Editor Editoren Emacs, Vim Notepad++ Eclipse, EPIC Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
16 Arbeitsumgebung Editor Arbeitsumgebung es gibt nur einen Weg, Programmieren zu lernen: Programmieren! beschaffen und installieren Sie sich eine Arbeitsumgebung! vollziehen Sie die Programmierbeispiele nach! absolvieren Sie die Übungen regelmäßig! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
17 Arbeitsumgebung Editor Arbeitsumgebung es gibt nur einen Weg, Programmieren zu lernen: Programmieren! beschaffen und installieren Sie sich eine Arbeitsumgebung! vollziehen Sie die Programmierbeispiele nach! absolvieren Sie die Übungen regelmäßig! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
18 Arbeitsumgebung Editor Arbeitsumgebung es gibt nur einen Weg, Programmieren zu lernen: Programmieren! beschaffen und installieren Sie sich eine Arbeitsumgebung! vollziehen Sie die Programmierbeispiele nach! absolvieren Sie die Übungen regelmäßig! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
19 Arbeitsumgebung Perl Perl-Interpreter auf vielen Plattformen verfügbar unter Unix meist vorhanden Windows: Distribution via integrierte Online-Dokumentation via perldoc Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
20 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
21 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
22 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
23 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
24 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
25 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
26 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
27 Arbeitsumgebung Perl Was ist Perl? Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister #!/usr/bin/perl foreach ( perldoc -u -f atan2 ) { s/\w<([^>]+)>/\u$1/g; print; } Interpreter (Just-in-Time compiler) Schwach typisiert Prozedural/Objektorientiert Sprachmächtig, viele Zusatzmodule Online Dokumentation perldoc Autor: Larry Wall und viele weitere Contributoren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
28 Arbeitsumgebung Perl Wofür Perl? Einsatzgebiete: Arbeiten auf Textdaten (sehr stark) WWW (CGI) Systemadministration Kleine bis mittlere Softwareprojekte (Beispiel BackupPC) Command line tools GUI (mit Tk oder Qt) Wo eher nicht? Hardwarenahe Software Nichtoffener Quelltext Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
29 Arbeitsumgebung Hello World! Hello World! Datei: hello.pl Windows: Suffix.pl mit Ausführung des Interpreters perl verknüpft Aufruf in Eingabeaufforderung:.\hello.pl oder perl hello.pl Un*x: chmod +x hello.pl deklariert Datei als Programm Aufruf aus Terminal:./hello.pl #!/usr/bin/perl print "Hello World!\n"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
30 Arbeitsumgebung Hello World! Übungen Provozieren Sie Fehler: Dateisuffix verändern Ausführbarkeit der Datei unterbinden (unter Linux) erste Zeile des Programms manipulieren (was bedeuten die Teile der ersten Zeile?) Semikolon löschen Anführungszeichen löschen Verändern Sie die Wirkung des Programms \n entfernen Ausgabetext verändern Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
31 Arbeitsumgebung Hello World! Übungen Provozieren Sie Fehler: Dateisuffix verändern Ausführbarkeit der Datei unterbinden (unter Linux) erste Zeile des Programms manipulieren (was bedeuten die Teile der ersten Zeile?) Semikolon löschen Anführungszeichen löschen Verändern Sie die Wirkung des Programms \n entfernen Ausgabetext verändern Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
32 Scalare Daten und Operatoren Scalare Daten elementarer Datentyp Komponente aggregierter Datentypen schwach typisiert meist Zahlen oder Zeichenketten #!/usr/bin/perl print... Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
33 Scalare Daten und Operatoren Scalare Daten elementarer Datentyp Komponente aggregierter Datentypen schwach typisiert meist Zahlen oder Zeichenketten #!/usr/bin/perl print... Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
34 Scalare Daten und Operatoren Scalare Daten elementarer Datentyp Komponente aggregierter Datentypen schwach typisiert meist Zahlen oder Zeichenketten #!/usr/bin/perl print... Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
35 Scalare Daten und Operatoren Scalare Daten elementarer Datentyp Komponente aggregierter Datentypen schwach typisiert meist Zahlen oder Zeichenketten #!/usr/bin/perl print... Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
36 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
37 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
38 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
39 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
40 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
41 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
42 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
43 Scalare Daten und Operatoren Zahlen Zahlen intern als double gespeichert(c, meist IEEE 754) Ganzzahlarithmetik kann erzwungen werden: Pragma integer Wirkung auf arithmetische Operationen beschränkt, Bespiel 3/2 1 interne Speicherung als int wo sinnvoll, wird automatisch in Ganzzahlen gewandelt unterscheide Zahl und ihre Darstellung! Wandlung Zahl Zeichenkette bei Bedarf siehe perldoc: perldata Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
44 Scalare Daten und Operatoren Fließpunkt-Literale e23 = = e-34 = E3 = 1000 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
45 Scalare Daten und Operatoren Ganzzahl-Literale Integers dezimal _680_801_063_338 = nondezimal oktal: führende Null 0377 = 255 hexadezimal: führend 0x 0xff = 0xFF = 255 binär: führend 0b 0b = 255 0x4A_7B_D3_EC Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
46 Scalare Daten und Operatoren Ganzzahl-Literale Integers dezimal _680_801_063_338 = nondezimal oktal: führende Null 0377 = 255 hexadezimal: führend 0x 0xff = 0xFF = 255 binär: führend 0b 0b = 255 0x4A_7B_D3_EC Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
47 Scalare Daten und Operatoren Arithmetische Operatoren E1 3 * 4 15 / 3 5 / / % 5 (Modulo, Divisionsrest; Ganzzahlrechnung) 2 ** 3 (Potenz) siehe perldoc: perlop Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
48 Scalare Daten und Operatoren Arithmetische Operatoren E1 3 * 4 15 / 3 5 / / % 5 (Modulo, Divisionsrest; Ganzzahlrechnung) 2 ** 3 (Potenz) siehe perldoc: perlop Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
49 Scalare Daten und Operatoren Bit-Operatoren 13 & ^ 11 7 << 3 0xff >> 4 ~13 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
50 Scalare Daten und Operatoren Zeichenketten Strings String: Folge von Zeichen (z.b. Bytes) Kodierung systemabhängig, z.b. ASCII kürzester String: leer längster String: entsprechend verfügbarem Speicher Zeichenfolgen beliebig interpretierbar (Bilder, Sound usw.) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
51 Scalare Daten und Operatoren Zeichenketten Strings String: Folge von Zeichen (z.b. Bytes) Kodierung systemabhängig, z.b. ASCII kürzester String: leer längster String: entsprechend verfügbarem Speicher Zeichenfolgen beliebig interpretierbar (Bilder, Sound usw.) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
52 Scalare Daten und Operatoren Zeichenketten Strings String: Folge von Zeichen (z.b. Bytes) Kodierung systemabhängig, z.b. ASCII kürzester String: leer längster String: entsprechend verfügbarem Speicher Zeichenfolgen beliebig interpretierbar (Bilder, Sound usw.) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
53 Scalare Daten und Operatoren Zeichenketten Strings String: Folge von Zeichen (z.b. Bytes) Kodierung systemabhängig, z.b. ASCII kürzester String: leer längster String: entsprechend verfügbarem Speicher Zeichenfolgen beliebig interpretierbar (Bilder, Sound usw.) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
54 Scalare Daten und Operatoren Zeichenketten-Literale Single Quoting hello Apostroph \ im Text hello world gute\n Tag \ \\ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
55 Scalare Daten und Operatoren Zeichenketten-Literale Double Quoting "hello" "hello world\n" "Zitat: \"Hello World\"" "Kurzzitat: hello " "hello\tworld" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
56 Scalare Daten und Operatoren Zeichenketten Sonderzeichen \n, \r line feed, carriage return \t, \f tab, form feed \a, \e beep, escape \007, \x7f octal, hexadecimal codes \l, \u next letter lower (upper) case \L, \U, \E following characters lower (upper) case until \E Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
57 Scalare Daten und Operatoren Zeichenketten-Operatoren "hello". "world" Verkettung "hello".. "world" "hello" x 3 Repetition "hello" x (3 + 2) "hello" x (3 / 2) 3 x hello 3 x 4 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
58 Scalare Daten und Operatoren Zeichenketten-Operatoren "hello". "world" Verkettung "hello".. "world" "hello" x 3 Repetition "hello" x (3 + 2) "hello" x (3 / 2) 3 x hello 3 x 4 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
59 Scalare Daten und Operatoren Konversion: Strings Zahlen Kontext: Operatoren definieren den Kontext der Operanden Operanden werden bei Bedarf gewandelt Semantik der Operatoren bleibt erhalten hello 3 + 4hello hello hello dezimal #!/usr/bin/perl -w # Warnung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
60 Scalare Daten und Operatoren Konversion: Strings Zahlen Kontext: Operatoren definieren den Kontext der Operanden Operanden werden bei Bedarf gewandelt Semantik der Operatoren bleibt erhalten hello 3 + 4hello hello hello dezimal #!/usr/bin/perl -w # Warnung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
61 Scalare Daten und Operatoren Konversion: Strings Zahlen Kontext: Operatoren definieren den Kontext der Operanden Operanden werden bei Bedarf gewandelt Semantik der Operatoren bleibt erhalten hello 3 + 4hello hello hello dezimal #!/usr/bin/perl -w # Warnung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
62 Scalare Daten und Operatoren Vergleichsoperatoren 03 == < 7 x 7 "123" eq 123 gt "abc" cmp ABC Vergleich arithmetisch textlich gleich == eq ungleich!= ne kleiner < lt kleiner oder gleich <= le größer > gt größer oder gleich >= ge Reihenfolge <=> cmp Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
63 Scalare Daten und Operatoren Vergleichsoperatoren 03 == < 7 x 7 "123" eq 123 gt "abc" cmp ABC Vergleich arithmetisch textlich gleich == eq ungleich!= ne kleiner < lt kleiner oder gleich <= le größer > gt größer oder gleich >= ge Reihenfolge <=> cmp Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
64 Scalare Daten und Operatoren Weitere Scalare Daten undef Referenzen File-Handles Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
65 Scalare Daten und Operatoren Scalare Variable $variable_mit_langem_namen $a $_auch_einevariable $ABC keine Großbuchstaben am Namensanfang! sprechende Namen Autovivifikation siehe perldoc: perlvar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
66 Scalare Daten und Operatoren Scalare Variable $variable_mit_langem_namen $a $_auch_einevariable $ABC keine Großbuchstaben am Namensanfang! sprechende Namen Autovivifikation siehe perldoc: perlvar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
67 Scalare Daten und Operatoren Scalare Variable $variable_mit_langem_namen $a $_auch_einevariable $ABC keine Großbuchstaben am Namensanfang! sprechende Namen Autovivifikation siehe perldoc: perlvar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
68 Scalare Daten und Operatoren Scalare Variable $variable_mit_langem_namen $a $_auch_einevariable $ABC keine Großbuchstaben am Namensanfang! sprechende Namen Autovivifikation siehe perldoc: perlvar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
69 Scalare Daten und Operatoren Scalare Variable $variable_mit_langem_namen $a $_auch_einevariable $ABC keine Großbuchstaben am Namensanfang! sprechende Namen Autovivifikation siehe perldoc: perlvar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
70 Scalare Daten und Operatoren Scalare Zuweisung $x = 42 $name = "Alfred" $sum = 3 + $name $lied = tra. la x 3 $x = $x + 4 $x += 4 $a.= "hello" $x **= 3 $z = $y = $x += 3 $x = (2,3 + 5) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
71 Scalare Daten und Operatoren Scalare Zuweisung $x = 42 $name = "Alfred" $sum = 3 + $name $lied = tra. la x 3 $x = $x + 4 $x += 4 $a.= "hello" $x **= 3 $z = $y = $x += 3 $x = (2,3 + 5) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
72 Scalare Daten und Operatoren Scalare Zuweisung $x = 42 $name = "Alfred" $sum = 3 + $name $lied = tra. la x 3 $x = $x + 4 $x += 4 $a.= "hello" $x **= 3 $z = $y = $x += 3 $x = (2,3 + 5) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
73 Scalare Daten und Operatoren Scalare Zuweisung $x = 42 $name = "Alfred" $sum = 3 + $name $lied = tra. la x 3 $x = $x + 4 $x += 4 $a.= "hello" $x **= 3 $z = $y = $x += 3 $x = (2,3 + 5) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
74 Scalare Daten und Operatoren Interpolation $name = "Alfred" print "Hallo $name" print Hallo $name print "x = $x\n" print x =. $x, "\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
75 Scalare Daten und Operatoren Operatoren Arithmetik Zeichenketten Zuweisung Vergleich Kardinalität (unär, binär, ternär) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
76 Scalare Daten und Operatoren Operatoren Arithmetik Zeichenketten Zuweisung Vergleich Kardinalität (unär, binär, ternär) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
77 Scalare Daten und Operatoren Operatoren Assoziativität und Präzedenz links -> nichtassoziativ rechts ** rechts! ~ \ unär: + - links =~!~ links * / % x links + -. links << >> nichtassoziativ < > <= >= lt gt le ge nichtassoziativ ==!= <=> eq ne cmp ~~ links & links ^ links && links // nichtassoziativ..... rechts?: rechts = += -= *= etc. links, => rechts not links and links or xor Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
78 Scalare Daten und Operatoren Übungen Was ergeben die folgenden Statements? $x = * ** 3 ** % 2.1 ~0 hello x world 3 * 4 x 5 3 x 4 * $y = 2; $x = $y += 3 $x = (3,4) $y = 4; $x = ( $y < 5 ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
79 Einfache Programmierung Fallunterscheidung Selektion $x = 3; if ( $x % 2 == 1 ) { print "$x ist ungerade\n"; } $x = 3; if ( $x % 2 == 0 ) { print "$x ist gerade\n"; } else { print "$x ist ungerade\n"; print "$x ist eventuell prim"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
80 Einfache Programmierung Was ist wahr? $x = 42; if ( $x ) { print "$x ist wahr\n" } falsch: 0 0 undef wahr: alles andere 1 "abc" " " 00 false Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
81 Einfache Programmierung Was ist wahr? $x = 42; if ( $x ) { print "$x ist wahr\n" } falsch: 0 0 undef wahr: alles andere 1 "abc" " " 00 false Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
82 Einfache Programmierung Was ist wahr? $x = 42; if ( $x ) { print "$x ist wahr\n" } falsch: 0 0 undef wahr: alles andere 1 "abc" " " 00 false Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
83 Einfache Programmierung Eingabe $x = <STDIN>; chomp $x; # remove linebreak if ( $x eq $x + 0 ) { print "Eingabe $x numerisch interpretierbar\n" } Achtung: was bewirkt $y = chomp($x) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
84 Einfache Programmierung Eingabe $x = <STDIN>; chomp $x; # remove linebreak if ( $x eq $x + 0 ) { print "Eingabe $x numerisch interpretierbar\n" } Achtung: was bewirkt $y = chomp($x) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
85 Einfache Programmierung Schleife Iteration $n = 5; while ( $n ) { "n = $n\n"; $n -= 1; } $x = undef; # clear $x while ( $x ) { print "hello\n" } $x = <STDIN>; if ( defined $x ) {print "Eingabe war $x"} while ( $x = <STDIN> ) { print $x } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
86 Einfache Programmierung Schleife Iteration $n = 5; while ( $n ) { "n = $n\n"; $n -= 1; } $x = undef; # clear $x while ( $x ) { print "hello\n" } $x = <STDIN>; if ( defined $x ) {print "Eingabe war $x"} while ( $x = <STDIN> ) { print $x } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
87 Einfache Programmierung Schleife Iteration $n = 5; while ( $n ) { "n = $n\n"; $n -= 1; } $x = undef; # clear $x while ( $x ) { print "hello\n" } $x = <STDIN>; if ( defined $x ) {print "Eingabe war $x"} while ( $x = <STDIN> ) { print $x } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
88 Einfache Programmierung Schleife Iteration $n = 5; while ( $n ) { "n = $n\n"; $n -= 1; } $x = undef; # clear $x while ( $x ) { print "hello\n" } $x = <STDIN>; if ( defined $x ) {print "Eingabe war $x"} while ( $x = <STDIN> ) { print $x } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
89 Einfache Programmierung Kommentare # bis Zeilenende Autor Datum Zweck unsinnige Kommentare $x += 1; # x inkrementieren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
90 Einfache Programmierung Kommentare # bis Zeilenende Autor Datum Zweck unsinnige Kommentare $x += 1; # x inkrementieren Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
91 Listen und Felder Liste Feld aggregierter Datentyp numerischer Index (ab Null) Feld, Array: benannte Liste, Listenvariable Liste: unbenannte Liste Aufbau aus Scalaren. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
92 Listen und Felder Liste Feld aggregierter Datentyp numerischer Index (ab Null) Feld, Array: benannte Liste, Listenvariable Liste: unbenannte Liste Aufbau aus Scalaren. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
93 Listen und Felder Liste Feld aggregierter Datentyp numerischer Index (ab Null) Feld, Array: benannte Liste, Listenvariable Liste: unbenannte Liste Aufbau aus Scalaren. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
94 Listen und Felder Feldelemente Zugriff: $a[0] = "hello"; $a[1] = "world"; $a[2] = 42; $a[5] = "hop"; Nutzung: $a[2] / 7; $a[1] x 2; Was ist $a? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
95 Listen und Felder Feldelemente Zugriff: $a[0] = "hello"; $a[1] = "world"; $a[2] = 42; $a[5] = "hop"; Nutzung: $a[2] / 7; $a[1] x 2; Was ist $a? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
96 Listen und Felder Feldelemente Zugriff: $a[0] = "hello"; $a[1] = "world"; $a[2] = 42; $a[5] = "hop"; Nutzung: $a[2] / 7; $a[1] x 2; Was ist $a? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
97 Listen und Felder Spezielle Feldindizes Ende: $n = $#a $a[$#a] $a[-1] $a[-100] $a[100] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
98 Listen und Felder Listen-Literale (1, 2, 3) (1, 2, 3,) ("hello", "world", 42) (1.. 13) ( ) (9.. 0) (0.. $#a) ($x + $y, $a. $b) qw/ hello world / qw( hello world ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
99 Listen und Felder Listen-Literale (1, 2, 3) (1, 2, 3,) ("hello", "world", 42) (1.. 13) ( ) (9.. 0) (0.. $#a) ($x + $y, $a. $b) qw/ hello world / qw( hello world ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
100 Listen und Felder Listen-Literale (1, 2, 3) (1, 2, 3,) ("hello", "world", 42) (1.. 13) ( ) (9.. 0) (0.. $#a) ($x + $y, $a. $b) qw/ hello world / qw( hello world ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
101 Listen und Felder Listen-Literale (1, 2, 3) (1, 2, 3,) ("hello", "world", 42) (1.. 13) ( ) (9.. 0) (0.. $#a) ($x + $y, $a. $b) qw/ hello world / qw( hello world ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
102 Listen und Felder Listenzuweisung ($a, $b, $c) = ("hello", "world", 42) ($a[0], $a[1], $a[2]) = ("hello", "world", = ("hello", "world", = qw ( hello world = (0.. 1e3) $a = = (@a, = = = () $#a = = undef # Oops! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
103 Listen und Felder Listenzuweisung ($a, $b, $c) = ("hello", "world", 42) ($a[0], $a[1], $a[2]) = ("hello", "world", = ("hello", "world", = qw ( hello world = (0.. 1e3) $a = = (@a, = = = () $#a = = undef # Oops! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
104 Listen und Felder Listenzuweisung ($a, $b, $c) = ("hello", "world", 42) ($a[0], $a[1], $a[2]) = ("hello", "world", = ("hello", "world", = qw ( hello world = (0.. 1e3) $a = = (@a, = = = () $#a = = undef # Oops! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
105 Listen und Felder Listenzuweisung ($a, $b, $c) = ("hello", "world", 42) ($a[0], $a[1], $a[2]) = ("hello", "world", = ("hello", "world", = qw ( hello world = (0.. 1e3) $a = = (@a, = = = () $#a = = undef # Oops! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
106 Listen und Felder Listenzuweisung ($a, $b, $c) = ("hello", "world", 42) ($a[0], $a[1], $a[2]) = ("hello", "world", = ("hello", "world", = qw ( hello world = (0.. 1e3) $a = = (@a, = = = () $#a = = undef # Oops! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
107 Listen und Felder = ("hello", "world", 42) $last = "13" (1.. 9) $first = "123" pop, shift auf leerem Array: undef Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
108 Listen und Felder = ("hello", "world", 42) $last = "13" (1.. 9) $first = "123" pop, shift auf leerem Array: undef Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
109 Listen und Felder = ("hello", "world", 42) $last = "13" (1.. 9) $first = "123" pop, shift auf leerem Array: undef Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
110 Listen und Felder = ("hello", "world", 42) $last = "13" (1.. 9) $first = "123" pop, shift auf leerem Array: undef Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
111 Listen und Felder = ("hello", "world", 42) $last = "13" (1.. 9) $first = "123" pop, shift auf leerem Array: undef Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
112 Listen und Felder = qw( Perl Prgramm ) print "Dies ist print "Dies ist print "Dies ist ein $text[-1]lein\n" $n = "3-2" print "Dies ist ein $text[$n]lein\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
113 Listen und Felder = qw( Perl Prgramm ) print "Dies ist print "Dies ist print "Dies ist ein $text[-1]lein\n" $n = "3-2" print "Dies ist ein $text[$n]lein\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
114 Listen und Felder = qw( Perl Prgramm ) print "Dies ist print "Dies ist print "Dies ist ein $text[-1]lein\n" $n = "3-2" print "Dies ist ein $text[$n]lein\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
115 Listen und Felder = qw(c Java Perl Fortran Assembler) foreach $lang ) { print "$lang\n" } foreach ) { print } foreach ) { print "$_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
116 Listen und Felder = qw(c Java Perl Fortran Assembler) foreach $lang ) { print "$lang\n" } foreach ) { print } foreach ) { print "$_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
117 Listen und Felder = qw(c Java Perl Fortran Assembler) foreach $lang ) { print "$lang\n" } foreach ) { print } foreach ) { print "$_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
118 Listen und Felder Operationen auf = ( = = = sort { $a <=> = map { 3 * $_ map { $_ *= = grep { $_ % 2 == 0 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
119 Listen und Felder Operationen auf = ( = = = sort { $a <=> = map { 3 * $_ map { $_ *= = grep { $_ % 2 == 0 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
120 Listen und Felder Operationen auf = ( = = = sort { $a <=> = map { 3 * $_ map { $_ *= = grep { $_ % 2 == 0 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
121 Listen und Felder Operationen auf = ( = = = sort { $a <=> = map { 3 * $_ map { $_ *= = grep { $_ % 2 == 0 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
122 Listen und Felder = (1.. = qw( hello world = (2, 3, 5), aber $a = (2, 3, 5) 3 $n = $z = $z = reverse = print "Intervall hat ", " Werte\n" print "Intervall hat + 0, " Werte\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
123 Listen und Felder = (1.. = qw( hello world = (2, 3, 5), aber $a = (2, 3, 5) 3 $n = $z = $z = reverse = print "Intervall hat ", " Werte\n" print "Intervall hat + 0, " Werte\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
124 Listen und Felder = (1.. = qw( hello world = (2, 3, 5), aber $a = (2, 3, 5) 3 $n = $z = $z = reverse = print "Intervall hat ", " Werte\n" print "Intervall hat + 0, " Werte\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
125 Listen und Felder = (1.. = qw( hello world = (2, 3, 5), aber $a = (2, 3, 5) 3 $n = $z = $z = reverse = print "Intervall hat ", " Werte\n" print "Intervall hat + 0, " Werte\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
126 Listen und Felder = (1.. = qw( hello world = (2, 3, 5), aber $a = (2, 3, 5) 3 $n = $z = $z = reverse = print "Intervall hat ", " Werte\n" print "Intervall hat + 0, " Werte\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
127 Listen und Felder = (1.. = qw( hello world = (2, 3, 5), aber $a = (2, 3, 5) 3 $n = $z = $z = reverse = print "Intervall hat ", " Werte\n" print "Intervall hat + 0, " Werte\n" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
128 Listen und Felder = (1.. 9) $x = = = ( , 3, qw/foo = 2, 3 $rem = 2, 3 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
129 Listen und Felder = (1.. 9) $x = = = ( , 3, qw/foo = 2, 3 $rem = 2, 3 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
130 Listen und Felder = (1.. 9) $x = = = ( , 3, qw/foo = 2, 3 $rem = 2, 3 Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
131 Listen und Felder = <STDIN> chomp(@text = <STDIN>) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
132 Listen und Felder = <STDIN> chomp(@text = <STDIN>) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
133 Listen und Felder Übungen Was bewirkt die folgende Anweisung? ($x, $y) = ($y, $x) Auf welche Weise kann ein Array gelöscht werden? Schreiben Sie ein Programm, das die Anzahl der eingelesenen Zeilen ausgibt! Schreiben Sie ein Programm, das die eingelesenen Zeilen in umgekehrter Reihenfolge wieder ausgibt! Wie können die Funktionen pop, push, shift und unshift durch splice nachgebildet werden? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
134 Funktionen Funktionen Listenoperatoren oder unäre Operatoren Listenkontext der Argumente Klammern: was aussieht wie eine Funktion, ist eine Funktion Klammern dürfen fehlen ohne Klammern gilt Operatorpräzedenz siehe perldoc: perlfunc Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
135 Funktionen Funktionen Listenoperatoren oder unäre Operatoren Listenkontext der Argumente Klammern: was aussieht wie eine Funktion, ist eine Funktion Klammern dürfen fehlen ohne Klammern gilt Operatorpräzedenz siehe perldoc: perlfunc Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
136 Funktionen Funktionen Listenoperatoren oder unäre Operatoren Listenkontext der Argumente Klammern: was aussieht wie eine Funktion, ist eine Funktion Klammern dürfen fehlen ohne Klammern gilt Operatorpräzedenz siehe perldoc: perlfunc Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
137 Funktionen Numerische Funktionen sqrt $x # Wurzel abs $x # Betrag exp $x # e^x log $x # Logarithmus naturalis sin $x, cos $x # Trigonometrie atan2 $y, $x # Arcus-Tangens [-Pi:Pi] $pi = 4 * atan2 1,1 rand $n # Zufallszahl < n Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
138 Funktionen Numerische Funktionen sqrt $x # Wurzel abs $x # Betrag exp $x # e^x log $x # Logarithmus naturalis sin $x, cos $x # Trigonometrie atan2 $y, $x # Arcus-Tangens [-Pi:Pi] $pi = 4 * atan2 1,1 rand $n # Zufallszahl < n Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
139 Funktionen Numerische Funktionen sqrt $x # Wurzel abs $x # Betrag exp $x # e^x log $x # Logarithmus naturalis sin $x, cos $x # Trigonometrie atan2 $y, $x # Arcus-Tangens [-Pi:Pi] $pi = 4 * atan2 1,1 rand $n # Zufallszahl < n Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
140 Funktionen Numerische Funktionen sqrt $x # Wurzel abs $x # Betrag exp $x # e^x log $x # Logarithmus naturalis sin $x, cos $x # Trigonometrie atan2 $y, $x # Arcus-Tangens [-Pi:Pi] $pi = 4 * atan2 1,1 rand $n # Zufallszahl < n Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
141 Funktionen Zeichenkettenfunktionen length $line reverse $line index $line, $word, $startpos $p = 0; while ( ( $p = index $line, $word, $p ) >= 0 ) { print "found $word at position $p\n"; $p += 1; } rindex $line, $word, $startpos # last $ex = substr $line, $offset, $length substr $line, $offset, $length, $repl Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
142 Funktionen Zeichenkettenfunktionen length $line reverse $line index $line, $word, $startpos $p = 0; while ( ( $p = index $line, $word, $p ) >= 0 ) { print "found $word at position $p\n"; $p += 1; } rindex $line, $word, $startpos # last $ex = substr $line, $offset, $length substr $line, $offset, $length, $repl Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
143 Funktionen Zeichenkettenfunktionen length $line reverse $line index $line, $word, $startpos $p = 0; while ( ( $p = index $line, $word, $p ) >= 0 ) { print "found $word at position $p\n"; $p += 1; } rindex $line, $word, $startpos # last $ex = substr $line, $offset, $length substr $line, $offset, $length, $repl Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
144 Funktionen Zeichenkettenfunktionen length $line reverse $line index $line, $word, $startpos $p = 0; while ( ( $p = index $line, $word, $p ) >= 0 ) { print "found $word at position $p\n"; $p += 1; } rindex $line, $word, $startpos # last $ex = substr $line, $offset, $length substr $line, $offset, $length, $repl Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
145 Funktionen Zeichenkettenfunktionen length $line reverse $line index $line, $word, $startpos $p = 0; while ( ( $p = index $line, $word, $p ) >= 0 ) { print "found $word at position $p\n"; $p += 1; } rindex $line, $word, $startpos # last $ex = substr $line, $offset, $length substr $line, $offset, $length, $repl Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
146 Funktionen Umwandlungsfunktionen hex $string; oct $string # String als hex./oct. Zahl chr $num # Zeichen der Codetabelle ord $char # Nummer des Zeichens uc $a; lc $a; ucfirst $a # gro ß /klein Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
147 Funktionen Umwandlungsfunktionen hex $string; oct $string # String als hex./oct. Zahl chr $num # Zeichen der Codetabelle ord $char # Nummer des Zeichens uc $a; lc $a; ucfirst $a # gro ß /klein Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
148 Funktionen Umwandlungsfunktionen hex $string; oct $string # String als hex./oct. Zahl chr $num # Zeichen der Codetabelle ord $char # Nummer des Zeichens uc $a; lc $a; ucfirst $a # gro ß /klein Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
149 Unterprogramme Benutzerdefinierte Funktionen Erweiterung Funktionsumfang Wiederverwendung von Code Unterschied Funktion/Subroutine Qualifizierer & (optional) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
150 Unterprogramme Benutzerdefinierte Funktionen Erweiterung Funktionsumfang Wiederverwendung von Code Unterschied Funktion/Subroutine Qualifizierer & (optional) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
151 Unterprogramme Benutzerdefinierte Funktionen Erweiterung Funktionsumfang Wiederverwendung von Code Unterschied Funktion/Subroutine Qualifizierer & (optional) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
152 Unterprogramme Unterprogramm Definition sub mehr { $n += 2; print "n = $n\n"; } Definition an beliebiger Stelle im Quelltext Definition global Mehrfachdefinition möglich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
153 Unterprogramme Unterprogramm Definition sub mehr { $n += 2; print "n = $n\n"; } Definition an beliebiger Stelle im Quelltext Definition global Mehrfachdefinition möglich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
154 Unterprogramme Unterprogramm Definition sub mehr { $n += 2; print "n = $n\n"; } Definition an beliebiger Stelle im Quelltext Definition global Mehrfachdefinition möglich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
155 Unterprogramme Unterprogramm Aufruf $n = 13; &mehr &mehr Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
156 Unterprogramme Unterprogramm Rückgabewerte Rückgabe: letzter evaluierter Wert sub sum { $c = $a + $b; } sub sum { $c = $a + $b; print "c = $c\n"; } sub fun { if ( $a > 3 ) { $x; } else { ( ); } } Expliziter Rücksprung sub fun { if ( $a < 0 ) { return -1; } else { $x = 42; } $x * $a; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
157 Unterprogramme Unterprogramm Rückgabewerte Rückgabe: letzter evaluierter Wert sub sum { $c = $a + $b; } sub sum { $c = $a + $b; print "c = $c\n"; } sub fun { if ( $a > 3 ) { $x; } else { ( ); } } Expliziter Rücksprung sub fun { if ( $a < 0 ) { return -1; } else { $x = 42; } $x * $a; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
158 Unterprogramme Unterprogramm Rückgabewerte Rückgabe: letzter evaluierter Wert sub sum { $c = $a + $b; } sub sum { $c = $a + $b; print "c = $c\n"; } sub fun { if ( $a > 3 ) { $x; } else { ( ); } } Expliziter Rücksprung sub fun { if ( $a < 0 ) { return -1; } else { $x = 42; } $x * $a; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
159 Unterprogramme Unterprogramm Rückgabewerte Rückgabe: letzter evaluierter Wert sub sum { $c = $a + $b; } sub sum { $c = $a + $b; print "c = $c\n"; } sub fun { if ( $a > 3 ) { $x; } else { ( ); } } Expliziter Rücksprung sub fun { if ( $a < 0 ) { return -1; } else { $x = 42; } $x * $a; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
160 Unterprogramme Unterprogramm Argumente sub max { if ( $_[0] > $_[1] ) { $_[0]; } else { $_[1]; } } $m = &max(7, 5, 11); # oops Übergabe Übung: call by reference oder call by value? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
161 Unterprogramme Unterprogramm Argumente sub max { if ( $_[0] > $_[1] ) { $_[0]; } else { $_[1]; } } $m = &max(7, 5, 11); # oops Übergabe Übung: call by reference oder call by value? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
162 Unterprogramme Private Variable sub max { my ($a, $b) if ( $a > $b ) { $a; } else { $b; } } $a = 5; $b = 7; print &max($a, $b); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
163 Unterprogramme Diskurs local älteres Perl-Idiom: local Variable bleibt global, erhält lokale Überblendung $g = "foo"; sub show { print $g; } sub local_show { local($g) = "bar"; &show(); } sub my_show { my($g) = "bar"; &show(); } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
164 Unterprogramme Diskurs local älteres Perl-Idiom: local Variable bleibt global, erhält lokale Überblendung $g = "foo"; sub show { print $g; } sub local_show { local($g) = "bar"; &show(); } sub my_show { my($g) = "bar"; &show(); } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
165 Unterprogramme Parameter-Listen sub max { if < 2 ) { print "minimum 2 args!"; } my ($s) = shift(@_); # why? foreach ) { if ( $_ > $s ) { $s = $_; } } $s; } $x = &max(7, 5, 13); $x = &max(); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
166 Unterprogramme Lokale Variable nutzen geschachtelte Sichtbarkeit Tip: grundsätzlich alle Variablen mit my lokalisieren überall verwendbar Kontext: my($s) = 0; foreach ( ) { my ($d) = 2 * $_; $s += $d; } print $s; my ($a) # list my $a # scalar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
167 Unterprogramme Lokale Variable nutzen geschachtelte Sichtbarkeit Tip: grundsätzlich alle Variablen mit my lokalisieren überall verwendbar Kontext: my($s) = 0; foreach ( ) { my ($d) = 2 * $_; $s += $d; } print $s; my ($a) # list my $a # scalar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
168 Unterprogramme Lokale Variable nutzen geschachtelte Sichtbarkeit Tip: grundsätzlich alle Variablen mit my lokalisieren überall verwendbar Kontext: my($s) = 0; foreach ( ) { my ($d) = 2 * $_; $s += $d; } print $s; my ($a) # list my $a # scalar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
169 Unterprogramme Lokale Variable nutzen geschachtelte Sichtbarkeit Tip: grundsätzlich alle Variablen mit my lokalisieren überall verwendbar Kontext: my($s) = 0; foreach ( ) { my ($d) = 2 * $_; $s += $d; } print $s; my ($a) # list my $a # scalar Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
170 Unterprogramme Pragma strict $dideldum = 42; print $dideldumm; # oops! Pragma use strict reduziert Namensfehler erzwingt Deklaration (per my) verbessert Wartbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
171 Unterprogramme Pragma strict $dideldum = 42; print $dideldumm; # oops! Pragma use strict reduziert Namensfehler erzwingt Deklaration (per my) verbessert Wartbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
172 Unterprogramme Übergabe getrennter Arrays Beipiel: komponentenweise Addition zweier Arrays Problem: Arrays werden verschmolzen sub add { ) empty!... }... Lösung: Referenzen siehe perldoc: perlref, perlreftut Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
173 Unterprogramme Übergabe getrennter Arrays Beipiel: komponentenweise Addition zweier Arrays Problem: Arrays werden verschmolzen sub add { ) empty!... }... Lösung: Referenzen siehe perldoc: perlref, perlreftut Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
174 Unterprogramme Übergabe getrennter Arrays Beipiel: komponentenweise Addition zweier Arrays Problem: Arrays werden verschmolzen sub add { ) empty!... }... Lösung: Referenzen siehe perldoc: perlref, perlreftut Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
175 Unterprogramme Referenzieren Referenz enthält Verweis auf Variable (oder Funktion) Analogie zu Pointern in C Referenz entspricht Adresse (im Speicher) Referenzoperator \: $scalarref = \$foo; $arrayref = \@array; $subref = \&tool; Referenzen sind immer Skalare Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
176 Unterprogramme Referenzieren Referenz enthält Verweis auf Variable (oder Funktion) Analogie zu Pointern in C Referenz entspricht Adresse (im Speicher) Referenzoperator \: $scalarref = \$foo; $arrayref = \@array; $subref = \&tool; Referenzen sind immer Skalare Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
177 Unterprogramme Referenzieren Referenz enthält Verweis auf Variable (oder Funktion) Analogie zu Pointern in C Referenz entspricht Adresse (im Speicher) Referenzoperator \: $scalarref = \$foo; $arrayref = \@array; $subref = \&tool; Referenzen sind immer Skalare Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
178 Unterprogramme Anonyme Referenzen unbenannte Liste: $aref = [ 42, "foo", -sqrt 2 ]; Unterschied ( ) und [ ]! unbenanntes Unterprogramm: $sref = sub { print "hello\n" } sub liefert Codereferenz Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
179 Unterprogramme Anonyme Referenzen unbenannte Liste: $aref = [ 42, "foo", -sqrt 2 ]; Unterschied ( ) und [ ]! unbenanntes Unterprogramm: $sref = sub { print "hello\n" } sub liefert Codereferenz Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
180 Unterprogramme De-Referenzieren Dereferenzierung per $x = ${$scalarref}; Vereinfacht (wenn Referenz $x = $$scalarref; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
181 Unterprogramme De-Referenzieren Dereferenzierung per $x = ${$scalarref}; Vereinfacht (wenn Referenz $x = $$scalarref; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
182 Unterprogramme Referenzen anwenden kopieren: $bref = $aref; Listen (Referenzen sind Skalare): = ( $aref, \$liste, [ 1, "bar" ] = ( 42, "foo", -1 ); $aref = \@a; print ${$aref}[1]; # prints "foo" print $aref->[1]; # the same (using arrow operator) Feldmanipulation "hello"; # append "hello" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
183 Unterprogramme Referenzen anwenden kopieren: $bref = $aref; Listen (Referenzen sind Skalare): = ( $aref, \$liste, [ 1, "bar" ] = ( 42, "foo", -1 ); $aref = \@a; print ${$aref}[1]; # prints "foo" print $aref->[1]; # the same (using arrow operator) Feldmanipulation "hello"; # append "hello" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
184 Unterprogramme Referenzen anwenden kopieren: $bref = $aref; Listen (Referenzen sind Skalare): = ( $aref, \$liste, [ 1, "bar" ] = ( 42, "foo", -1 ); $aref = \@a; print ${$aref}[1]; # prints "foo" print $aref->[1]; # the same (using arrow operator) Feldmanipulation "hello"; # append "hello" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
185 Unterprogramme Komplexe Referenzen mehrfach = ( "foo", "bar" ); $y = \@z; $x = \$y; $w = \$x; print ${${${$w}}}[0]; # prints "foo" Lists of lists (zum Beispiel = ( "foo", 42, "bar" = ( \@a, [2, 3, 5], [ "hello", \@a ]); print $r[2]->[1]->[2]; # prints "bar" print $r[2][1][2]; # arrow optional between brackets Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
186 Unterprogramme Komplexe Referenzen mehrfach = ( "foo", "bar" ); $y = \@z; $x = \$y; $w = \$x; print ${${${$w}}}[0]; # prints "foo" Lists of lists (zum Beispiel = ( "foo", 42, "bar" = ( \@a, [2, 3, 5], [ "hello", \@a ]); print $r[2]->[1]->[2]; # prints "bar" print $r[2][1][2]; # arrow optional between brackets Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
187 Unterprogramme Referenz abfragen Liste = ( 1, 2, 3 ); $a = \@a; $r = ref $a; # $r now "ARRAY" $sref = sub foo { print "hello"; }; $r = ref $sref; # $r now "CODE" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
188 Unterprogramme Referenz abfragen Liste = ( 1, 2, 3 ); $a = \@a; $r = ref $a; # $r now "ARRAY" $sref = sub foo { print "hello"; }; $r = ref $sref; # $r now "CODE" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
189 Unterprogramme Beispiel für Referenzen sub add { my ($a, $b) foreach ) { $_ += } = ( 1.. = ( 2, 3, 5, 7, 11); add(\@x, \@y); # Nebenwirkung? print "@x\n"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
190 Unterprogramme Verwendung des Ampersand Ampersand (&) qualifiziert Subroutines vermeidbar, wenn: Nutzung per Rückwärtsreferenz keine Namenskollision zu Builtins bei Aufruf mit Ampersand müssen Klammern gesetzt werden bei Aufruf ohne Ampersand dürfen Klammern fehlen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
191 Unterprogramme Verwendung des Ampersand Ampersand (&) qualifiziert Subroutines vermeidbar, wenn: Nutzung per Rückwärtsreferenz keine Namenskollision zu Builtins bei Aufruf mit Ampersand müssen Klammern gesetzt werden bei Aufruf ohne Ampersand dürfen Klammern fehlen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
192 Unterprogramme Rekursion Unterprogramme können rekursiv aufgerufen werden Speicherverbrauch und Rechenzeit beachten gegebenenfalls in Iteration wandeln Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
193 Unterprogramme Übungen Schreiben Sie ein Unterprogramm, das die Summe einer Liste berechnet Schreiben Sie ein Unterprogramm, das Minimum, Mittelwert und Maximum einer Liste berechnet. Schreiben Sie ein Unterprogramm, das die mittlere Wortlänge einer Liste berechnet. Gegeben sei eine Tabelle als Liste von Zeilen. Schreiben Sie ein Unterprogramm, das eine Liste der Spalten dieser Tabelle zurückgibt. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
194 Assoziative Felder Hashes Datenstruktur Hash assoziative Liste (Schlüssel, Wert) Skalare Aggregierter Datentyp allgemeine Zeichenketten als Schlüssel Schlüssel eindeutig Hash-Algorithmus Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
195 Assoziative Felder Hashes Datenstruktur Hash assoziative Liste (Schlüssel, Wert) Skalare Aggregierter Datentyp allgemeine Zeichenketten als Schlüssel Schlüssel eindeutig Hash-Algorithmus Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
196 Assoziative Felder Hashes Datenstruktur Hash assoziative Liste (Schlüssel, Wert) Skalare Aggregierter Datentyp allgemeine Zeichenketten als Schlüssel Schlüssel eindeutig Hash-Algorithmus Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
197 Assoziative Felder Hashes Datenstruktur Hash assoziative Liste (Schlüssel, Wert) Skalare Aggregierter Datentyp allgemeine Zeichenketten als Schlüssel Schlüssel eindeutig Hash-Algorithmus Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
198 Assoziative Felder Hashes Datenstruktur Hash assoziative Liste (Schlüssel, Wert) Skalare Aggregierter Datentyp allgemeine Zeichenketten als Schlüssel Schlüssel eindeutig Hash-Algorithmus Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
199 Assoziative Felder Hashes Datenstruktur Hash assoziative Liste (Schlüssel, Wert) Skalare Aggregierter Datentyp allgemeine Zeichenketten als Schlüssel Schlüssel eindeutig Hash-Algorithmus Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
200 Assoziative Felder Hashes Hash Verwendung Schlüssel Rechnername Artikelnummer Wort Dateiname Wert IP-Adresse Preis Anzahl übergeordnetes Verzeichnis Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
201 Assoziative Felder Hashes Hash Zugriff auf Elemente $hash{$key} geschweifte Klammern $preis{"08x15"} $preis{"47y11"} = 5.67 $p = $preis{5 + 6 * 7. "Y11"} $wert{ } vs. $wert[ ] $wert{$index} Index bedeutungsfrei Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
202 Assoziative Felder Hashes Hash Zugriff auf Elemente $hash{$key} geschweifte Klammern $preis{"08x15"} $preis{"47y11"} = 5.67 $p = $preis{5 + 6 * 7. "Y11"} $wert{ } vs. $wert[ ] $wert{$index} Index bedeutungsfrei Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
203 Assoziative Felder Hashes Hash Zugriff auf Elemente $hash{$key} geschweifte Klammern $preis{"08x15"} $preis{"47y11"} = 5.67 $p = $preis{5 + 6 * 7. "Y11"} $wert{ } vs. $wert[ ] $wert{$index} Index bedeutungsfrei Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
204 Assoziative Felder Hashes Hash Zuweisung %hash Gesamthash %preis = ( "CPU", 99.95, "RAM", 39.90, "HD", = %preis Reihenfolge %a = %b %a = reverse %b my %price = ( CPU => 99.95, RAM => 39.90, HD => , ); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
205 Assoziative Felder Hashes Hash Zuweisung %hash Gesamthash %preis = ( "CPU", 99.95, "RAM", 39.90, "HD", = %preis Reihenfolge %a = %b %a = reverse %b my %price = ( CPU => 99.95, RAM => 39.90, HD => , ); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
206 Assoziative Felder Hashes Hash Zuweisung %hash Gesamthash %preis = ( "CPU", 99.95, "RAM", 39.90, "HD", = %preis Reihenfolge %a = %b %a = reverse %b my %price = ( CPU => 99.95, RAM => 39.90, HD => , ); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
207 Assoziative Felder Hashes Schlüssel und Werte = keys %hash = values %hash my $c = keys %hash my $h = %hash # true/false Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
208 Assoziative Felder Hashes Schlüssel und Werte = keys %hash = values %hash my $c = keys %hash my $h = %hash # true/false Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
209 Assoziative Felder Hashes Schlüssel und Werte = keys %hash = values %hash my $c = keys %hash my $h = %hash # true/false Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
210 Assoziative Felder Hashes Hash-Iteration while ( ( $key, $val ) = each %hash ) { print "$key => $val\n"; } foreach $key ( sort keys %hash ) { # Speicherbedarf print "$key => $hash{$key}\n"; # Interpolation } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
211 Assoziative Felder Hashes Hash-Iteration while ( ( $key, $val ) = each %hash ) { print "$key => $val\n"; } foreach $key ( sort keys %hash ) { # Speicherbedarf print "$key => $hash{$key}\n"; # Interpolation } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
212 Assoziative Felder Hashes Hashelement Existenz und Löschung $hash{"data"} = undef if ( exists ($hash{"data"}) ) { print "exists"} delete $hash{"data"} %h = () Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
213 Assoziative Felder Hashes Hashelement Existenz und Löschung $hash{"data"} = undef if ( exists ($hash{"data"}) ) { print "exists"} delete $hash{"data"} %h = () Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
214 Assoziative Felder Hashes Hashelement Existenz und Löschung $hash{"data"} = undef if ( exists ($hash{"data"}) ) { print "exists"} delete $hash{"data"} %h = () Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
215 Assoziative Felder Hashes Hashelement Existenz und Löschung $hash{"data"} = undef if ( exists ($hash{"data"}) ) { print "exists"} delete $hash{"data"} %h = () Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
216 Assoziative Felder Hashes Hash Interpolation print "$hash{$key}" print "%hash"; # oops Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
217 Assoziative Felder Hashes Hash Teilfelder %h = ( foo => 123, bar => "hello", dummy => "crash" = qw /foo Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
218 Assoziative Felder Hashes Hash-Referenzen Übergabe von Hashes an Subroutines: in Gestalt eines Arrays: sub foo { my (%h) }... foo( %hash ) effektiver als Referenz: sub foo { my ($href) my %h = %{$href};... }... foo( \%hash ) auch bei Rückgabe möglich: return \%h; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
219 Assoziative Felder Hashes Hash-Referenzen Übergabe von Hashes an Subroutines: in Gestalt eines Arrays: sub foo { my (%h) }... foo( %hash ) effektiver als Referenz: sub foo { my ($href) my %h = %{$href};... }... foo( \%hash ) auch bei Rückgabe möglich: return \%h; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
220 Assoziative Felder Hashes Hash-Referenzen Übergabe von Hashes an Subroutines: in Gestalt eines Arrays: sub foo { my (%h) }... foo( %hash ) effektiver als Referenz: sub foo { my ($href) my %h = %{$href};... }... foo( \%hash ) auch bei Rückgabe möglich: return \%h; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
221 Assoziative Felder Hashes Anonyme Hashreferenz analog zur Liste: $a = [ 13, bar, \@b ]; analog zur Liste: $h = { Name => Meyer, Vorname => Emil }; Typ der Referenz: $r = ref $h; # $r now "HASH" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
222 Assoziative Felder Hashes Anonyme Hashreferenz analog zur Liste: $a = [ 13, bar, \@b ]; analog zur Liste: $h = { Name => Meyer, Vorname => Emil }; Typ der Referenz: $r = ref $h; # $r now "HASH" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
223 Assoziative Felder Hashes Anonyme Hashreferenz analog zur Liste: $a = [ 13, bar, \@b ]; analog zur Liste: $h = { Name => Meyer, Vorname => Emil }; Typ der Referenz: $r = ref $h; # $r now "HASH" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
224 Assoziative Felder Hashes Hashreferenzen für komplexe Datenstrukturen hashes of hashes (hoh) hashes of lists (hol) lists of hashes (loh) lists of lists (lol) beliebig komplexe Datenstrukturen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
225 Assoziative Felder Hashes Hashreferenzen für komplexe Datenstrukturen hashes of hashes (hoh) hashes of lists (hol) lists of hashes (loh) lists of lists (lol) beliebig komplexe Datenstrukturen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
226 Assoziative Felder Hashes Beispiel für komplexe Datenstruktur $db = [ { ID => 12345, Name => Schulze, Fon => { Fix => [ , ], Mobil => [ ], } }, { ID => 23456, }, ];... $id = $$db[0]{ ID Fon }{ Fix }}; print "ID=$id, Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
227 Assoziative Felder Hashes Referenzen Beispiel: XML-Datei <computer> <pc name="anton"> <network> <ipaddress> </ipaddress> <nameserver> </nameserver> <nameserver> </nameserver> </network> <hardware> <cpu type="quadcore" freq="2.0 GHz"/> <disk> <type>s-ata</type> <size>500 GB</size> </disk> </hardware> </pc> <pc name="bert"> </pc> </computer> Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
228 Assoziative Felder Hashes Komplexe Datenstrukturen XML use XML::Simple; # XML-Parser use Data::Dumper; # output complex data structures $x = XMLin("pc.xml"); # get XML file print Dumper($x); # show content $dns = $$x{ pc }{ anton }{ network }{ nameserver }[0]; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
229 Assoziative Felder Hashes Übungen Schreiben Sie ein Programm, das jede Zeile als ein Wort einliest und die sortierte Liste aller distinkten Wörter ausgibt! Schreiben Sie ein Programm, das jede Zeile als ein Wort einliest und für jedes Wort die Häufigkeit ausgibt! Wie kann vorab geprüft werden, ob ein Hash revertiert werden kann? Bilden Sie mit Hash-Operationen die Mengen-Operationen Vereinigung, Restmenge und Schnittmenge nach! Hund, Katze, Maus, Strauß und Kobra sind Landtiere. Hund, Katze, Maus, Robbe, Delfin und Fledermaus sind Säugetiere. Bestimmen Sie: alle Tiere Tiere, die nicht an Land leben Säugetiere, die an Land leben Schreiben Sie Unterprogramme, die Mengen als Hashes erhalten und für zwei gegebene Menge jeweils Vereinigungsmenge, Schnittmenge und Restmenge der ersten ohne die zweite Menge bestimmen. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
230 Assoziative Felder Hashes Zusatz-Übung Referenz Gegeben ist die folgende Vorgängerabhängigkeit von Programmiersprachen: %vorfahr = ( C => Fortran, C++ => C, PL/1 => Cobol, Pascal => PL/1, Fortran => Assembler, Cobol => Assembler, Java => C++, Lisp => Assembler, Prolog => Lisp, Scheme => Lisp, ); Schreiben Sie ein Programm, das für alle gegebenen Programmiersprachen jeweils die komplette Vorgängerlinie ausgibt! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
231 Assoziative Felder Hashes Zusatz-Übungen Referenzen Ein typisches Dateiformat ist das INI-Format. Es ist in Abschnitte mit Titeln in eckigen Klammern gegliedert. Darin stehen Zeilen der Form Parameter = Wert. Schreiben Sie ein Unterprogramm, das INI-Dateien einliest und als Referenz auf einen HoH zurückgibt. Nutzen Sie das Modul XML::Simple, um die oben eingelesene Datei im XML-Format abzuspeichern und das Modul Data::Dumper, um diese Datenstruktur auszugeben. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
232 Standard I/O Standard Input Lesen von stdin Kurzform while ( defined( $line = <STDIN> )) { print "$.: $line"; # $. - line number } while ( <STDIN> ) { print "$.: $_"; } # implizite Zuweisung an $_ Listenkontext foreach ( <STDIN> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
233 Standard I/O Standard Input Lesen von stdin Kurzform while ( defined( $line = <STDIN> )) { print "$.: $line"; # $. - line number } while ( <STDIN> ) { print "$.: $_"; } # implizite Zuweisung an $_ Listenkontext foreach ( <STDIN> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
234 Standard I/O Standard Input Lesen von stdin Kurzform while ( defined( $line = <STDIN> )) { print "$.: $line"; # $. - line number } while ( <STDIN> ) { print "$.: $_"; } # implizite Zuweisung an $_ Listenkontext foreach ( <STDIN> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
235 Standard I/O Diamond Operator <> Eingabe über stdin cat foo myprog.pl myprog.pl < bar Eingabe aus Dateinamen als Aufrufargument myprog.pl foo.dat bar.dat Idee: wenn stdin, dann von dort lesen wenn Dateinamen übergeben, dann aus Dateien lesen while ( <> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
236 Standard I/O Diamond Operator <> Eingabe über stdin cat foo myprog.pl myprog.pl < bar Eingabe aus Dateinamen als Aufrufargument myprog.pl foo.dat bar.dat Idee: wenn stdin, dann von dort lesen wenn Dateinamen übergeben, dann aus Dateien lesen while ( <> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
237 Standard I/O Diamond Operator <> Eingabe über stdin cat foo myprog.pl myprog.pl < bar Eingabe aus Dateinamen als Aufrufargument myprog.pl foo.dat bar.dat Idee: wenn stdin, dann von dort lesen wenn Dateinamen übergeben, dann aus Dateien lesen while ( <> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
238 Standard I/O Diamond Operator <> Eingabe über stdin cat foo myprog.pl myprog.pl < bar Eingabe aus Dateinamen als Aufrufargument myprog.pl foo.dat bar.dat Idee: wenn stdin, dann von dort lesen wenn Dateinamen übergeben, dann aus Dateien lesen while ( <> ) { print "$.: $_"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
239 Standard I/O Aufrufargumente Aufrufargumente wie normales Feld zu behandeln (shift, = qw/foo bar/ # read from these files while ( <> ) { print "$ARGV/$.: $_"; # $ARGV - filename } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
240 Standard I/O Aufrufargumente Aufrufargumente wie normales Feld zu behandeln (shift, = qw/foo bar/ # read from these files while ( <> ) { print "$ARGV/$.: $_"; # $ARGV - filename } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
241 Standard I/O Standard Output print "hello"; print STDOUT "hello"; # no comma! print ( ) * 4 Ausgabe gepuffert, Autoflush: $ = 1 foreach ("a".. "z") {print; sleep 1} $ = 1; foreach ("a".. "z") {print; sleep 1} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
242 Standard I/O Standard Output print "hello"; print STDOUT "hello"; # no comma! print ( ) * 4 Ausgabe gepuffert, Autoflush: $ = 1 foreach ("a".. "z") {print; sleep 1} $ = 1; foreach ("a".. "z") {print; sleep 1} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
243 Standard I/O Standard Output print "hello"; print STDOUT "hello"; # no comma! print ( ) * 4 Ausgabe gepuffert, Autoflush: $ = 1 foreach ("a".. "z") {print; sleep 1} $ = 1; foreach ("a".. "z") {print; sleep 1} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
244 Standard I/O Formatierte Ausgabe formatierte Ausgabe analog zu C printf "hello %s, the answer is %d", $user, $n printf "pi/4 = atan(1.0) = %g", atan2(1,1) printf "n = %6d", $n; # right justified printf "%-20s", $name; # left justified printf "pi ~ %8.4f", 22/7; printf "Rabatt = %.2f%%", 3/100 $fmt = "%6d" printf "%6d" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
245 Standard I/O Formatierte Ausgabe formatierte Ausgabe analog zu C printf "hello %s, the answer is %d", $user, $n printf "pi/4 = atan(1.0) = %g", atan2(1,1) printf "n = %6d", $n; # right justified printf "%-20s", $name; # left justified printf "pi ~ %8.4f", 22/7; printf "Rabatt = %.2f%%", 3/100 $fmt = "%6d" printf "%6d" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
246 Standard I/O Formatierte Ausgabe formatierte Ausgabe analog zu C printf "hello %s, the answer is %d", $user, $n printf "pi/4 = atan(1.0) = %g", atan2(1,1) printf "n = %6d", $n; # right justified printf "%-20s", $name; # left justified printf "pi ~ %8.4f", 22/7; printf "Rabatt = %.2f%%", 3/100 $fmt = "%6d" printf "%6d" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
247 Standard I/O Formatierte Ausgabe formatierte Ausgabe analog zu C printf "hello %s, the answer is %d", $user, $n printf "pi/4 = atan(1.0) = %g", atan2(1,1) printf "n = %6d", $n; # right justified printf "%-20s", $name; # left justified printf "pi ~ %8.4f", 22/7; printf "Rabatt = %.2f%%", 3/100 $fmt = "%6d" printf "%6d" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
248 Standard I/O Formatierte Ausgabe formatierte Ausgabe analog zu C printf "hello %s, the answer is %d", $user, $n printf "pi/4 = atan(1.0) = %g", atan2(1,1) printf "n = %6d", $n; # right justified printf "%-20s", $name; # left justified printf "pi ~ %8.4f", 22/7; printf "Rabatt = %.2f%%", 3/100 $fmt = "%6d" printf "%6d" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
249 Standard I/O Formatierte Ausgabe formatierte Ausgabe analog zu C printf "hello %s, the answer is %d", $user, $n printf "pi/4 = atan(1.0) = %g", atan2(1,1) printf "n = %6d", $n; # right justified printf "%-20s", $name; # left justified printf "pi ~ %8.4f", 22/7; printf "Rabatt = %.2f%%", 3/100 $fmt = "%6d" printf "%6d" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
250 Standard I/O Interne Ausgabe Analog zu formatierter Ausgabe Erstellen von Strings zur internen Verarbeitung $pi = sprintf "%.2f", 4 * atan2(1,1); # round $date = sprintf "%.4d-%.2d-%.2d", $y, $m, $d Vorsicht: Listenkontext nicht analog zu printf Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
251 Standard I/O Interne Ausgabe Analog zu formatierter Ausgabe Erstellen von Strings zur internen Verarbeitung $pi = sprintf "%.2f", 4 * atan2(1,1); # round $date = sprintf "%.4d-%.2d-%.2d", $y, $m, $d Vorsicht: Listenkontext nicht analog zu printf Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
252 Standard I/O Interne Ausgabe Analog zu formatierter Ausgabe Erstellen von Strings zur internen Verarbeitung $pi = sprintf "%.2f", 4 * atan2(1,1); # round $date = sprintf "%.4d-%.2d-%.2d", $y, $m, $d Vorsicht: Listenkontext nicht analog zu printf Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
253 Standard I/O Übungen schreiben Sie ein Programm, das alle Aufrufargumente zeilenweise nummeriert ausgibt. Eine Datei enthält: hello world and friends was liefert die folgende = <>; print "@t" Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
254 Reguläre Ausdrücke Regulärer Ausdruck Idee Woran erkennt man: eine Zahl eine Uhrzeit eine -Adresse ein Absatzende? Muster! Nicht verwechseln mit Dateinamensmustern! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
255 Reguläre Ausdrücke Regulärer Ausdruck Idee Woran erkennt man: eine Zahl eine Uhrzeit eine -Adresse ein Absatzende? Muster! Nicht verwechseln mit Dateinamensmustern! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
256 Reguläre Ausdrücke Regulärer Ausdruck Idee Woran erkennt man: eine Zahl eine Uhrzeit eine -Adresse ein Absatzende? Muster! Nicht verwechseln mit Dateinamensmustern! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
257 Reguläre Ausdrücke Einfache Muster Pattern $_ = "dideldum"; if ( /del/ ) { print "passt!"; } Muster zwischen // Muster passt oder passt nicht Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
258 Reguläre Ausdrücke Einfache Muster Pattern $_ = "dideldum"; if ( /del/ ) { print "passt!"; } Muster zwischen // Muster passt oder passt nicht Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
259 Reguläre Ausdrücke Meta-Zeichen /3\.14159/ vs. / / Punkt passt auf ein Zeichen Punkt passt auf jedes Zeichen (bis auf Zeilenende) Schutz durch \ Aber: \t Tabulator Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
260 Reguläre Ausdrücke Meta-Zeichen /3\.14159/ vs. / / Punkt passt auf ein Zeichen Punkt passt auf jedes Zeichen (bis auf Zeilenende) Schutz durch \ Aber: \t Tabulator Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
261 Reguläre Ausdrücke Quantifizierer /fo*bar/ /fo+bar/ /fo?bar/ /fo{3}bar/ /fo{3,5}bar/ /fo{3,}bar/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
262 Reguläre Ausdrücke Quantifizierer /fo*bar/ /fo+bar/ /fo?bar/ /fo{3}bar/ /fo{3,5}bar/ /fo{3,}bar/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
263 Reguläre Ausdrücke Gruppierung /foo+/ vs. /(foo)+/ /((foo)+(bar)+)?/ /(foobardideldum)*/ passt auf "hello world"! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
264 Reguläre Ausdrücke Alternation /foo bar hello/ /foo( \t)+bar/ /foo( + \t+)bar/ /foo (and or) bar/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
265 Reguläre Ausdrücke Muster-Test #!/usr/bin/perl while ( <> ) { chomp; if ( /MUSTER/ ) { print "passt: $ <$&>$ \n" } else { print "passt nicht\n"; } } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
266 Reguläre Ausdrücke Greediness reguläre Ausdrücke normalerweise gierig (greedy) $_ = "AxyzApqrA"; /A.*A/ greedy /A.*?A/ nongreedy /A[^A]*A/ oft ähnlich wie nongreedy Matching-Variable: $, $&, $ langsam! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
267 Reguläre Ausdrücke Greediness reguläre Ausdrücke normalerweise gierig (greedy) $_ = "AxyzApqrA"; /A.*A/ greedy /A.*?A/ nongreedy /A[^A]*A/ oft ähnlich wie nongreedy Matching-Variable: $, $&, $ langsam! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
268 Reguläre Ausdrücke Greediness reguläre Ausdrücke normalerweise gierig (greedy) $_ = "AxyzApqrA"; /A.*A/ greedy /A.*?A/ nongreedy /A[^A]*A/ oft ähnlich wie nongreedy Matching-Variable: $, $&, $ langsam! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
269 Reguläre Ausdrücke Übungen Finden Sie heraus, ob Groß- und Kleinschreibung unterschieden wird! Erstellen Sie ein Muster, das auf alle phonetisch äquivalenten Schreibweisen des Eigennamens Meier passt! Erstellen Sie ein Muster, das auf die folgenden Zeichenketten passt! "\\***" +. ( ) Schreiben Sie ein Programm, das alle Zeilen der Eingabe ausgibt, die foo enthalten! Schreiben Sie ein Programm, das alle Zeilen der Eingabe ausgibt, die foo und bar enthalten! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
270 Reguläre Ausdrücke Zeichenklassen [abc] statt (a b c) [0-9], [a-xz] [0-9-] [\000-\037] (Steuerzeichen) Klasse steht für ein Zeichen Quantoren: [0-9]+ Negation: [^aeiou] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
271 Reguläre Ausdrücke Zeichenklassen [abc] statt (a b c) [0-9], [a-xz] [0-9-] [\000-\037] (Steuerzeichen) Klasse steht für ein Zeichen Quantoren: [0-9]+ Negation: [^aeiou] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
272 Reguläre Ausdrücke Zeichenklassen [abc] statt (a b c) [0-9], [a-xz] [0-9-] [\000-\037] (Steuerzeichen) Klasse steht für ein Zeichen Quantoren: [0-9]+ Negation: [^aeiou] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
273 Reguläre Ausdrücke Zeichenklassen [abc] statt (a b c) [0-9], [a-xz] [0-9-] [\000-\037] (Steuerzeichen) Klasse steht für ein Zeichen Quantoren: [0-9]+ Negation: [^aeiou] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
274 Reguläre Ausdrücke Zeichenklassen Kurzformen [0-9] \d [\da-fa-f] [a-za-z0-9_] \w [\r\n\t\f ] \s (Whitespace) \w+\s+\w+ Wort Zwischenraum Wort Negation: \d \D \s \S \w \W [\d\d]. [^\d\d] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
275 Reguläre Ausdrücke Zeichenklassen Kurzformen [0-9] \d [\da-fa-f] [a-za-z0-9_] \w [\r\n\t\f ] \s (Whitespace) \w+\s+\w+ Wort Zwischenraum Wort Negation: \d \D \s \S \w \W [\d\d]. [^\d\d] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
276 Reguläre Ausdrücke Zeichenklassen Kurzformen [0-9] \d [\da-fa-f] [a-za-z0-9_] \w [\r\n\t\f ] \s (Whitespace) \w+\s+\w+ Wort Zwischenraum Wort Negation: \d \D \s \S \w \W [\d\d]. [^\d\d] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
277 Reguläre Ausdrücke Zeichenklassen Kurzformen [0-9] \d [\da-fa-f] [a-za-z0-9_] \w [\r\n\t\f ] \s (Whitespace) \w+\s+\w+ Wort Zwischenraum Wort Negation: \d \D \s \S \w \W [\d\d]. [^\d\d] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
278 Reguläre Ausdrücke Anker Zeilenanker: Zeilenanfang: ^ /^hello/ aber: /^[^helo]/ Zeilenende: $ /world$/ /^\s*$/ Wortanker: \W+\b\w+\b\W+ /\Bmeier\b/: Obermeier aber nicht meier /\b\$\w+\b/ Perl-Skalarname? (oops!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
279 Reguläre Ausdrücke Anker Zeilenanker: Zeilenanfang: ^ /^hello/ aber: /^[^helo]/ Zeilenende: $ /world$/ /^\s*$/ Wortanker: \W+\b\w+\b\W+ /\Bmeier\b/: Obermeier aber nicht meier /\b\$\w+\b/ Perl-Skalarname? (oops!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
280 Reguläre Ausdrücke Anker Zeilenanker: Zeilenanfang: ^ /^hello/ aber: /^[^helo]/ Zeilenende: $ /world$/ /^\s*$/ Wortanker: \W+\b\w+\b\W+ /\Bmeier\b/: Obermeier aber nicht meier /\b\$\w+\b/ Perl-Skalarname? (oops!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
281 Reguläre Ausdrücke Anker Zeilenanker: Zeilenanfang: ^ /^hello/ aber: /^[^helo]/ Zeilenende: $ /world$/ /^\s*$/ Wortanker: \W+\b\w+\b\W+ /\Bmeier\b/: Obermeier aber nicht meier /\b\$\w+\b/ Perl-Skalarname? (oops!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
282 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
283 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
284 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
285 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
286 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
287 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
288 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
289 Reguläre Ausdrücke Klammern Speicherlisten Klammern gruppieren und speichern gefundene Sequenzen Speicherung in einer Liste Ablage in der Folge der öffnenden Klammern Zugriff über: \1, \2,... innerhalb des Musters $1, $2,... außerhalb des Musters Beispielanwendung: Muster für Doppelbuchstaben. /\w\w/ zu allgemein. /(.)\1/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
290 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
291 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
292 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
293 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
294 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
295 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
296 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
297 Reguläre Ausdrücke Rückwärtsreferenzen Referenz auf gefundene Sequenzen des Musters /(.)\1/ /^(\w+)\s+\1$/ /(hello world)(foo bar)\2\1/ /((Ober Unter)meier)\s+\2$/ Außerhalb des Musters: $1, $2, etc. Listeneinträge werden bei Bemusterung überschrieben möglichst nur kurz verwenden sichern: if ( /(\d+)/ ) {$n = $1} Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
298 Reguläre Ausdrücke Benannte Musterfolgen alternativ zur Klammerposition /(?<Wort>\w)/ /(? Wort \w)/ /(?<Wort>\w)\k<Wort>/ Rückwärtsreferenz /(?<Wort>\w)\1/ mischbar mit Positionsreferenz gespeicherte Sequenzen im Hash %+ keys %+ values %+ for (keys %+) { print "$+{$_}"} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
299 Reguläre Ausdrücke Benannte Musterfolgen alternativ zur Klammerposition /(?<Wort>\w)/ /(? Wort \w)/ /(?<Wort>\w)\k<Wort>/ Rückwärtsreferenz /(?<Wort>\w)\1/ mischbar mit Positionsreferenz gespeicherte Sequenzen im Hash %+ keys %+ values %+ for (keys %+) { print "$+{$_}"} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
300 Reguläre Ausdrücke Benannte Musterfolgen alternativ zur Klammerposition /(?<Wort>\w)/ /(? Wort \w)/ /(?<Wort>\w)\k<Wort>/ Rückwärtsreferenz /(?<Wort>\w)\1/ mischbar mit Positionsreferenz gespeicherte Sequenzen im Hash %+ keys %+ values %+ for (keys %+) { print "$+{$_}"} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
301 Reguläre Ausdrücke Benannte Musterfolgen alternativ zur Klammerposition /(?<Wort>\w)/ /(? Wort \w)/ /(?<Wort>\w)\k<Wort>/ Rückwärtsreferenz /(?<Wort>\w)\1/ mischbar mit Positionsreferenz gespeicherte Sequenzen im Hash %+ keys %+ values %+ for (keys %+) { print "$+{$_}"} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
302 Reguläre Ausdrücke Benannte Musterfolgen alternativ zur Klammerposition /(?<Wort>\w)/ /(? Wort \w)/ /(?<Wort>\w)\k<Wort>/ Rückwärtsreferenz /(?<Wort>\w)\1/ mischbar mit Positionsreferenz gespeicherte Sequenzen im Hash %+ keys %+ values %+ for (keys %+) { print "$+{$_}"} Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
303 Reguläre Ausdrücke Reguläre Ausdrücke Präzedenz 1. Klammern 2. Quantoren: (abc+) (abc)+ 3. Anker und Zeichenfolgen 4. Alternation Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
304 Reguläre Ausdrücke Übungen Worauf passt /^foo bar$/ Ein HTML-Eintrag setzt sich aus Tag und Attribut zusammen, zum Beispiel <image source="bild.jpg">. Statt Anführungszeichen dürfen auch Apostroph erscheinen. Welches Muster isoliert den Namen der Source in einer Speichervariablen? Ein anderes HTML-Konstrukt sieht den Tag am Anfang und am Ende vor, zum Beispiel <H1>Titel</H1>. Isolieren Sie den Eintrag zwischen Taganfang und -ende! Erstellen Sie ein Muster zur Erkennung gültiger Perl-Skalarnamen! Erstellen Sie ein Muster, das Zeilen mit doppelt auftretenden Wörtern erkennt! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
305 Reguläre Ausdrücke Pattern Matching /MUSTER/ als Kurzform für m/muster/ unpraktisch, wenn MUSTER Slashes enthält; alternative Muster-Begrenzer: m(muster) m!muster! m^muster^ m[muster] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
306 Reguläre Ausdrücke Pattern Matching /MUSTER/ als Kurzform für m/muster/ unpraktisch, wenn MUSTER Slashes enthält; alternative Muster-Begrenzer: m(muster) m!muster! m^muster^ m[muster] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
307 Reguläre Ausdrücke Bindungsoperator =~ Matching gegen beliebige Variable $line =~ /MUSTER/ $line =~ m(muster) Fallunterscheidung: if ( $line =~ m[muster] )... Wert des Matching-Operators: $passt = ( $line =~ /PTN/ ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
308 Reguläre Ausdrücke Bindungsoperator =~ Matching gegen beliebige Variable $line =~ /MUSTER/ $line =~ m(muster) Fallunterscheidung: if ( $line =~ m[muster] )... Wert des Matching-Operators: $passt = ( $line =~ /PTN/ ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
309 Reguläre Ausdrücke Bindungsoperator =~ Matching gegen beliebige Variable $line =~ /MUSTER/ $line =~ m(muster) Fallunterscheidung: if ( $line =~ m[muster] )... Wert des Matching-Operators: $passt = ( $line =~ /PTN/ ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
310 Reguläre Ausdrücke Pattern Matching Optionen Groß-/Kleinschreibung: m/muster/i Sonderbedeutung von Newline aufheben: m/muster/s Globales Matching: while ( /(MUSTER)/g ) { $n += 1 } Matching im = ( $line =~ m/(muster)/g ) oder: ($a, $b) = ( $line =~ m/(m1).*(m2)/g ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
311 Reguläre Ausdrücke Pattern Matching Optionen Groß-/Kleinschreibung: m/muster/i Sonderbedeutung von Newline aufheben: m/muster/s Globales Matching: while ( /(MUSTER)/g ) { $n += 1 } Matching im = ( $line =~ m/(muster)/g ) oder: ($a, $b) = ( $line =~ m/(m1).*(m2)/g ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
312 Reguläre Ausdrücke Pattern Matching Optionen Groß-/Kleinschreibung: m/muster/i Sonderbedeutung von Newline aufheben: m/muster/s Globales Matching: while ( /(MUSTER)/g ) { $n += 1 } Matching im = ( $line =~ m/(muster)/g ) oder: ($a, $b) = ( $line =~ m/(m1).*(m2)/g ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
313 Reguläre Ausdrücke Pattern Matching Optionen Groß-/Kleinschreibung: m/muster/i Sonderbedeutung von Newline aufheben: m/muster/s Globales Matching: while ( /(MUSTER)/g ) { $n += 1 } Matching im = ( $line =~ m/(muster)/g ) oder: ($a, $b) = ( $line =~ m/(m1).*(m2)/g ) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
314 Reguläre Ausdrücke Interpolation in Mustern $p = hel+o Matching: $line =~ /$p/ Muster kann veränderlich sein Mehrfachnutzung komplizierter Muster: $num = [+-]?\d+\.\d*([ee][+-]\d+)? if ( $line =~ /$num/ )... if ( $line =~ /$num/o )... (Muster fix) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
315 Reguläre Ausdrücke Interpolation in Mustern $p = hel+o Matching: $line =~ /$p/ Muster kann veränderlich sein Mehrfachnutzung komplizierter Muster: $num = [+-]?\d+\.\d*([ee][+-]\d+)? if ( $line =~ /$num/ )... if ( $line =~ /$num/o )... (Muster fix) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
316 Reguläre Ausdrücke Interpolation in Mustern $p = hel+o Matching: $line =~ /$p/ Muster kann veränderlich sein Mehrfachnutzung komplizierter Muster: $num = [+-]?\d+\.\d*([ee][+-]\d+)? if ( $line =~ /$num/ )... if ( $line =~ /$num/o )... (Muster fix) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
317 Reguläre Ausdrücke Interpolation in Mustern $p = hel+o Matching: $line =~ /$p/ Muster kann veränderlich sein Mehrfachnutzung komplizierter Muster: $num = [+-]?\d+\.\d*([ee][+-]\d+)? if ( $line =~ /$num/ )... if ( $line =~ /$num/o )... (Muster fix) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
318 Reguläre Ausdrücke Substitution Suchen und Ersetzen s/muster/ersatz/ Beispiele: s/(\w+)\s+(\w+)/$2 $1/ s/^/>>> / s/hello// s/(\w+)/\u$1/ s/\s+/_/g s(this)[that] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
319 Reguläre Ausdrücke Substitution Suchen und Ersetzen s/muster/ersatz/ Beispiele: s/(\w+)\s+(\w+)/$2 $1/ s/^/>>> / s/hello// s/(\w+)/\u$1/ s/\s+/_/g s(this)[that] Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
320 Reguläre Ausdrücke Look ahead 00:E0:7D:7D:14:D5 00-E0-7D-7D-14-D5 Idee: s/([\da-f]{2}):([\da-f]{2})/$1-$2/ig Muster Folgemuster Folgemuster wird nicht verbraucht s/([\da-f]{2}):(?=[\da-f]{2})/$1-$2/ig Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
321 Reguläre Ausdrücke Look ahead 00:E0:7D:7D:14:D5 00-E0-7D-7D-14-D5 Idee: s/([\da-f]{2}):([\da-f]{2})/$1-$2/ig Muster Folgemuster Folgemuster wird nicht verbraucht s/([\da-f]{2}):(?=[\da-f]{2})/$1-$2/ig Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
322 Reguläre Ausdrücke Look ahead 00:E0:7D:7D:14:D5 00-E0-7D-7D-14-D5 Idee: s/([\da-f]{2}):([\da-f]{2})/$1-$2/ig Muster Folgemuster Folgemuster wird nicht verbraucht s/([\da-f]{2}):(?=[\da-f]{2})/$1-$2/ig Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
323 Reguläre Ausdrücke Look ahead 00:E0:7D:7D:14:D5 00-E0-7D-7D-14-D5 Idee: s/([\da-f]{2}):([\da-f]{2})/$1-$2/ig Muster Folgemuster Folgemuster wird nicht verbraucht s/([\da-f]{2}):(?=[\da-f]{2})/$1-$2/ig Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
324 Reguläre Ausdrücke Look behind setze Leerzeichen hinter Satzzeichen grouping: s/([,;.])/$1 /g look behind: s/(?<=[,;.])/ /g setze Leerzeichen hinter Satzzeichen, aber nicht zwischen Ziffern: s/(?<=[,.](?!(?<=\d[.,])(?=\d)))/ /g Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
325 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
326 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
327 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
328 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
329 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
330 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
331 Reguläre Ausdrücke Trennen split Trennen an = split /sep/, $line ($a, $b, $rest) = split /\s+/, $line, = split /;/, = split, = split, = = split /(\s+)/ Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
332 Reguläre Ausdrücke Verbinden join Gegenstück zu split keine regulären Ausdrücke $line = $text = join Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
333 Reguläre Ausdrücke Verbinden join Gegenstück zu split keine regulären Ausdrücke $line = $text = join Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
334 Reguläre Ausdrücke Verbinden join Gegenstück zu split keine regulären Ausdrücke $line = $text = join Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
335 Reguläre Ausdrücke Transliteration y (tr) y/zeichenliste/ersatz/ zeichenweise Transliteration y/a-z/a-z/ Intervalle! Keine regulären Ausdrücke y/0-9//d alle Ziffern löschen y/\n//s mehrfache Leerzeilen zusammenfassen y/0-9//dc alle Zeichen löschen, die nicht Ziffern sind $n = y/0-9// Anzahl Ziffern Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
336 Reguläre Ausdrücke Transliteration y (tr) y/zeichenliste/ersatz/ zeichenweise Transliteration y/a-z/a-z/ Intervalle! Keine regulären Ausdrücke y/0-9//d alle Ziffern löschen y/\n//s mehrfache Leerzeilen zusammenfassen y/0-9//dc alle Zeichen löschen, die nicht Ziffern sind $n = y/0-9// Anzahl Ziffern Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
337 Reguläre Ausdrücke Transliteration y (tr) y/zeichenliste/ersatz/ zeichenweise Transliteration y/a-z/a-z/ Intervalle! Keine regulären Ausdrücke y/0-9//d alle Ziffern löschen y/\n//s mehrfache Leerzeilen zusammenfassen y/0-9//dc alle Zeichen löschen, die nicht Ziffern sind $n = y/0-9// Anzahl Ziffern Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
338 Reguläre Ausdrücke Transliteration y (tr) y/zeichenliste/ersatz/ zeichenweise Transliteration y/a-z/a-z/ Intervalle! Keine regulären Ausdrücke y/0-9//d alle Ziffern löschen y/\n//s mehrfache Leerzeilen zusammenfassen y/0-9//dc alle Zeichen löschen, die nicht Ziffern sind $n = y/0-9// Anzahl Ziffern Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
339 Reguläre Ausdrücke Übungen Zählen Sie die Wörter einer Zeile! Gegeben sei ein Text (Zeilen aus Wörtern und Daten): geben Sie den Text mit einem Wort/Datum je Zeile aus; addieren Sie die Werte aller Zahlen; erstellen Sie eine sortierte Liste mit allen großgeschriebenen Wörtern von mehr als drei Buchstaben; Geben Sie die Häufigkeit jedes Wortes unabhängig von Groß-/Kleinschreibung an; geben Sie alle Wörter an, die alle Vokale enthalten; geben Sie alle Wörter an, die die Vokale in alphabetischer Reihenfolge enthalten; geben Sie alle Wörter an, die am Ende die gleichen drei Buchstaben tragen wie am Anfang; In einer Datei wird das Komma als Dezimaltrenner benutzt. Ersetzen Sie nur diese Kommata durch Punkte. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
340 Kontrollstrukturen Mehrfache Fallunterscheidung if ( /^\$\w+$/ ) { print "identifier"; } elsif ( /^[-+*/]$/ ) { print "arithmetic operator"; } elsif ( /^\d+$/ ) { print "number"; } else { print "not recognized"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
341 Kontrollstrukturen Fallunterscheidung unless vs. if if ( $x > 3 ) { # nop } else { print "low x"; } unless ( $x > 3 ) { print "low x"; } unless ( $x > 3 ) { print "low x"; } else { print "high x"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
342 Kontrollstrukturen Fallunterscheidung unless vs. if if ( $x > 3 ) { # nop } else { print "low x"; } unless ( $x > 3 ) { print "low x"; } unless ( $x > 3 ) { print "low x"; } else { print "high x"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
343 Kontrollstrukturen Fallunterscheidung unless vs. if if ( $x > 3 ) { # nop } else { print "low x"; } unless ( $x > 3 ) { print "low x"; } unless ( $x > 3 ) { print "low x"; } else { print "high x"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
344 Kontrollstrukturen Schleife until vs. while while ( $n < 10 ) { print $n; $n += 1; } until ( $n > 10 ) { print $n; $n += 1; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
345 Kontrollstrukturen Schleife until vs. while while ( $n < 10 ) { print $n; $n += 1; } until ( $n > 10 ) { print $n; $n += 1; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
346 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
347 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
348 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
349 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
350 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
351 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
352 Kontrollstrukturen Ausdrucksmodifizierer if ( $n < 0 ) { print "$n negative"} print "$n negative" if $n < 0 $n += $n until $n > 1000 &calc($_) print "$1 numeric" if /(\d+)/ Stilmittel (Ausnahmesituationen) Kontrollausdruck wird vorab ausgewertet Bei Codeerweiterung oft Wandlung in Standardkontrollstrukturen erforderlich Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
353 Kontrollstrukturen Nackte Block-Struktur { } my $x; # local scope $x = 3 * $y + 4; print "x = $x"; nackter Block analog while-schleife ein Durchlauf lokale Variable Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
354 Kontrollstrukturen Nackte Block-Struktur { } my $x; # local scope $x = 3 * $y + 4; print "x = $x"; nackter Block analog while-schleife ein Durchlauf lokale Variable Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
355 Kontrollstrukturen Nackte Block-Struktur { } my $x; # local scope $x = 3 * $y + 4; print "x = $x"; nackter Block analog while-schleife ein Durchlauf lokale Variable Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
356 Kontrollstrukturen Nackte Block-Struktur { } my $x; # local scope $x = 3 * $y + 4; print "x = $x"; nackter Block analog while-schleife ein Durchlauf lokale Variable Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
357 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
358 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
359 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
360 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
361 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
362 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
363 Kontrollstrukturen Auto-In/Decrement $n += 1 $n ++ $cnt{$_}++ $n -- if $n > 0 $x = 3; $y = $x ++ # Postinkrement $y = ++ $x # Präinkrement $a[++ $i] = $i + $i ++ # Vorsicht(Sequenzpunkt!) Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
364 Kontrollstrukturen Schleife for(;;) for ( $s = 0, $i = 0; $i < $n; $i ++ ) { $s += $i; } $s = 0; $i = 0; while ( $i < $n ) { $s += $i; $i ++; } for (;;) {} # Endlosschleife Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
365 Kontrollstrukturen Schleife for(;;) for ( $s = 0, $i = 0; $i < $n; $i ++ ) { $s += $i; } $s = 0; $i = 0; while ( $i < $n ) { $s += $i; $i ++; } for (;;) {} # Endlosschleife Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
366 Kontrollstrukturen Schleife for(;;) for ( $s = 0, $i = 0; $i < $n; $i ++ ) { $s += $i; } $s = 0; $i = 0; while ( $i < $n ) { $s += $i; $i ++; } for (;;) {} # Endlosschleife Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
367 Kontrollstrukturen Schleife for(;;) vs. foreach() $n = 0; foreach ) { print "$n: $_"; $n ++; } for ) { # equivalent to foreach print "$n: $_"; $n ++; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
368 Kontrollstrukturen Schleife for(;;) vs. foreach() $n = 0; foreach ) { print "$n: $_"; $n ++; } for ) { # equivalent to foreach print "$n: $_"; $n ++; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
369 Kontrollstrukturen Schleifenkontrolle while ( <> ) { last if / END /; # loop exit... } # jump here while ( <> ) { s/#.*//; # ignore comment next if /^\s*$/; # ignore empty line... # jump here } while ( 1 ) { # jump here print "$x * $y =?"; $z = <>; redo unless $x * $y == $z;... } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
370 Kontrollstrukturen Schleifenkontrolle while ( <> ) { last if / END /; # loop exit... } # jump here while ( <> ) { s/#.*//; # ignore comment next if /^\s*$/; # ignore empty line... # jump here } while ( 1 ) { # jump here print "$x * $y =?"; $z = <>; redo unless $x * $y == $z;... } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
371 Kontrollstrukturen Schleifenkontrolle while ( <> ) { last if / END /; # loop exit... } # jump here while ( <> ) { s/#.*//; # ignore comment next if /^\s*$/; # ignore empty line... # jump here } while ( 1 ) { # jump here print "$x * $y =?"; $z = <>; redo unless $x * $y == $z;... } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
372 Kontrollstrukturen Schleifenkontrolle mit Labels LINE: while ( <> ) { foreach ( split ) { last LINE if /FINISH/; # nested loop } } if ( /desaster/ ) goto RESCUE; # remember Dijkstra... RESCUE: # emergency code Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
373 Kontrollstrukturen Schleifenkontrolle mit Labels LINE: while ( <> ) { foreach ( split ) { last LINE if /FINISH/; # nested loop } } if ( /desaster/ ) goto RESCUE; # remember Dijkstra... RESCUE: # emergency code Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
374 Kontrollstrukturen Do-Block $x = do { $n *= 2; $n + 3; }; do evaluiert die Statements im Block und liefert Wert des letzten Statements zurück. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
375 Kontrollstrukturen Do-Block $x = do { $n *= 2; $n + 3; }; do evaluiert die Statements im Block und liefert Wert des letzten Statements zurück. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
376 Kontrollstrukturen Do-Block mit Endbedingung do { $n += 1; $n *= 2; } while $n < 100; Modifier while mindestens ein Durchlauf do bildet keine Schleife kein last, next, redo Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
377 Kontrollstrukturen Do-Block mit Endbedingung do { $n += 1; $n *= 2; } while $n < 100; Modifier while mindestens ein Durchlauf do bildet keine Schleife kein last, next, redo Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
378 Kontrollstrukturen Do-Block mit Endbedingung do { $n += 1; $n *= 2; } while $n < 100; Modifier while mindestens ein Durchlauf do bildet keine Schleife kein last, next, redo Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
379 Kontrollstrukturen Do-Block mit Endbedingung do { $n += 1; $n *= 2; } while $n < 100; Modifier while mindestens ein Durchlauf do bildet keine Schleife kein last, next, redo Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
380 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
381 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
382 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
383 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
384 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
385 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
386 Kontrollstrukturen Logische Operatoren if ( $x < 3 $x > 7 ) { print "x von 5 entfernt"; } if ( $x > 3 && $x < 7 ) { print "x nah bei 5"; } $c = $cnt{$word} unseen ; ( $a < $b ) && ( $a = $b ) # instead of if $a < $b and $a = $b # precedence Short Circuit (Teilevaluation) Seiteneffekte liefert den letzten evaluierten Ausdruck Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
387 Kontrollstrukturen Ternärer Operator if ( $x % 2 == 0 ) { $y = $x / 2; } else { $y = 3 * $x; } $y = ($x%2 == 0)? ($x/2) : (3*$x); Kurzform für if-then-else liefert Wert Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
388 Kontrollstrukturen Ternärer Operator if ( $x % 2 == 0 ) { $y = $x / 2; } else { $y = 3 * $x; } $y = ($x%2 == 0)? ($x/2) : (3*$x); Kurzform für if-then-else liefert Wert Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
389 Kontrollstrukturen Ternärer Operator if ( $x % 2 == 0 ) { $y = $x / 2; } else { $y = 3 * $x; } $y = ($x%2 == 0)? ($x/2) : (3*$x); Kurzform für if-then-else liefert Wert Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
390 Kontrollstrukturen Ternärer Operator if ( $x % 2 == 0 ) { $y = $x / 2; } else { $y = 3 * $x; } $y = ($x%2 == 0)? ($x/2) : (3*$x); Kurzform für if-then-else liefert Wert Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
391 Kontrollstrukturen Ternärer Operator if ( $x % 2 == 0 ) { $y = $x / 2; } else { $y = 3 * $x; } $y = ($x%2 == 0)? ($x/2) : (3*$x); Kurzform für if-then-else liefert Wert Lesbarkeit Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
392 Kontrollstrukturen Sortieren Operatoren sort { $a <=> $b sort { length $a <=> length $b or $a cmp $b sort { # Hash sort $cnt{$a} <=> $cnt{$b} or $a cmp $b } keys %cnt; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
393 Kontrollstrukturen Sortieren Operatoren sort { $a <=> $b sort { length $a <=> length $b or $a cmp $b sort { # Hash sort $cnt{$a} <=> $cnt{$b} or $a cmp $b } keys %cnt; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
394 Kontrollstrukturen Sortieren Operatoren sort { $a <=> $b sort { length $a <=> length $b or $a cmp $b sort { # Hash sort $cnt{$a} <=> $cnt{$b} or $a cmp $b } keys %cnt; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
395 Dateien File-Handles File-Handle zur Identifikation einer Datei (statt Namen) Bezeichner für File-Handles in Großbuchstaben vordefinierte File-Handles: STDIN, STDOUT, STDERR Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
396 Dateien File-Handles File-Handle zur Identifikation einer Datei (statt Namen) Bezeichner für File-Handles in Großbuchstaben vordefinierte File-Handles: STDIN, STDOUT, STDERR Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
397 Dateien File-Handles File-Handle zur Identifikation einer Datei (statt Namen) Bezeichner für File-Handles in Großbuchstaben vordefinierte File-Handles: STDIN, STDOUT, STDERR Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
398 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
399 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
400 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
401 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
402 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
403 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
404 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
405 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
406 Dateien Dateien Öffnen und Schließen open INPUT, "data.txt" open INPUT, "<data.txt" # read open OUTPUT, ">data.txt" # write open DATA, "+<data.txt" # read AND write (binary files) open DATA, "+>data.txt" # write AND read (binary files) open LOG, ">>sys.log" # append $dat = "data.txt"; open OUT, "> $dat" close HANDLE; # asap Tipp: Textdateien nicht zum Lesen und Schreiben öffnen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
407 Dateien Fatale Fehler my $success = open DATA, "data"; if ( $success ) { # process file close DATA; } open DATA, $file or die "$0: can t open $file $! "; for ) { unless ( open DATA, $_ ) { warn "can t open $_: $!"; next; } } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
408 Dateien Fatale Fehler my $success = open DATA, "data"; if ( $success ) { # process file close DATA; } open DATA, $file or die "$0: can t open $file $! "; for ) { unless ( open DATA, $_ ) { warn "can t open $_: $!"; next; } } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
409 Dateien Fatale Fehler my $success = open DATA, "data"; if ( $success ) { # process file close DATA; } open DATA, $file or die "$0: can t open $file $! "; for ) { unless ( open DATA, $_ ) { warn "can t open $_: $!"; next; } } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
410 Dateien Verwendung von File-Handles open DATA, $file; while ( <DATA> ) {... } open LOG, "> $log"; print LOG "information"; # NO comma open OUT, ">data"; printf(out "x = %8d\n", $x); # NO comma open OUT, ">foo.dat"; print OUT "this"; open OUT, ">bar.dat"; # implies close print OUT "that"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
411 Dateien Verwendung von File-Handles open DATA, $file; while ( <DATA> ) {... } open LOG, "> $log"; print LOG "information"; # NO comma open OUT, ">data"; printf(out "x = %8d\n", $x); # NO comma open OUT, ">foo.dat"; print OUT "this"; open OUT, ">bar.dat"; # implies close print OUT "that"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
412 Dateien Verwendung von File-Handles open DATA, $file; while ( <DATA> ) {... } open LOG, "> $log"; print LOG "information"; # NO comma open OUT, ">data"; printf(out "x = %8d\n", $x); # NO comma open OUT, ">foo.dat"; print OUT "this"; open OUT, ">bar.dat"; # implies close print OUT "that"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
413 Dateien Verwendung von File-Handles open DATA, $file; while ( <DATA> ) {... } open LOG, "> $log"; print LOG "information"; # NO comma open OUT, ">data"; printf(out "x = %8d\n", $x); # NO comma open OUT, ">foo.dat"; print OUT "this"; open OUT, ">bar.dat"; # implies close print OUT "that"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
414 Dateien Standard Ausgabe-File-Handle open OUT, ">data"; select OUT; print "$x, $y, $z"; # output to OUT select OUT; $ = 1; print "$x, $y"; # to OUT, implies flush Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
415 Dateien Standard Ausgabe-File-Handle open OUT, ">data"; select OUT; print "$x, $y, $z"; # output to OUT select OUT; $ = 1; print "$x, $y"; # to OUT, implies flush Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
416 Dateien Standard-File-Handles Umleitung der Standard-I/O File-Handles erlaubt: open STDOUT, ">myfile"; print "hello\n"; # goes to myfile Scheitert die Umleitung, werden Standard-I/O File-Handles automatisch neu geöffnet Schließen der Standard-I/O File-Handles erfolgt meist bei Service-Prozessen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
417 Dateien Standard-File-Handles Umleitung der Standard-I/O File-Handles erlaubt: open STDOUT, ">myfile"; print "hello\n"; # goes to myfile Scheitert die Umleitung, werden Standard-I/O File-Handles automatisch neu geöffnet Schließen der Standard-I/O File-Handles erfolgt meist bei Service-Prozessen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
418 Dateien Standard-File-Handles Umleitung der Standard-I/O File-Handles erlaubt: open STDOUT, ">myfile"; print "hello\n"; # goes to myfile Scheitert die Umleitung, werden Standard-I/O File-Handles automatisch neu geöffnet Schließen der Standard-I/O File-Handles erfolgt meist bei Service-Prozessen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
419 Dateien Datei Tests die "file $file exists" if -e $file open "$d" unless -d $d warn "file very old" if -M HANDLE > 100 $f if -s $f > 1e6 and -A $f > 100 for ) { print "$_ lesbar" if -r } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
420 Dateien Datei Tests die "file $file exists" if -e $file open "$d" unless -d $d warn "file very old" if -M HANDLE > 100 $f if -s $f > 1e6 and -A $f > 100 for ) { print "$_ lesbar" if -r } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
421 Dateien Datei Tests die "file $file exists" if -e $file open "$d" unless -d $d warn "file very old" if -M HANDLE > 100 $f if -s $f > 1e6 and -A $f > 100 for ) { print "$_ lesbar" if -r } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
422 Dateien Datei Tests die "file $file exists" if -e $file open "$d" unless -d $d warn "file very old" if -M HANDLE > 100 $f if -s $f > 1e6 and -A $f > 100 for ) { print "$_ lesbar" if -r } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
423 Dateien Datei Tests die "file $file exists" if -e $file open "$d" unless -d $d warn "file very old" if -M HANDLE > 100 $f if -s $f > 1e6 and -A $f > 100 for ) { print "$_ lesbar" if -r } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
424 Dateien Datei Testoperatoren Op. Bedeutung -r Datei ist lesbar -w Datei ist beschreibbar -x Datei ist ausführbar -o Datei gehört dem User -e Datei existiert -z Datei ist leer -s Datei besitzt Inhalt (liefert Größe in Bytes) -f ist reguläre Datei -d ist Verzeichnis -M Dauer seit letzter Modifikation in Tagen -A Dauer seit letztem Zugriff in Tagen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
425 Dateien Datei-Eigenschaften ($dev,$ino,$mode,$nlink, $uid,$gid,$rdev, $size, $atime,$mtime,$ctime, $blksize,$blocks) = stat($filename); $size = (stat $f)[7]; $mtime = (stat _)[9]; # from last stat; faster Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
426 Dateien Datei-Eigenschaften ($dev,$ino,$mode,$nlink, $uid,$gid,$rdev, $size, $atime,$mtime,$ctime, $blksize,$blocks) = stat($filename); $size = (stat $f)[7]; $mtime = (stat _)[9]; # from last stat; faster Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
427 Dateien Datei-Eigenschaften ($dev,$ino,$mode,$nlink, $uid,$gid,$rdev, $size, $atime,$mtime,$ctime, $blksize,$blocks) = stat($filename); $size = (stat $f)[7]; $mtime = (stat _)[9]; # from last stat; faster Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
428 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
429 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
430 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
431 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
432 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
433 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
434 Dateien Datei-Zeitmarken $mtime = (stat $file)[9]; ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime($mtime); Monat: 0 11 Jahr: ab 1900 Wochentag: 1 Montag $t = localtime($mtime); # scalar context $now = time; # Epoch, seconds since # :00:00 UTC $now = time; $last_week = $now - 7 * 24 * 60 * 60; utime $now, $last_week, $file; # atime - now Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
435 Dateien Binärdateien Lesen: open DAT, $file; binmode DAT; # platform! read DAT, $buf, $length; close DAT; Positionieren: Schreiben: open OUT, ">$result"; binmode OUT; print OUT $buf; close OUT; open DAT, $file; read DAT, $buf, $length; seek DAT, 8, 0; # position to byte 8 # 0 - from beginning # 1 - relative to position # 2 - from end (normally negative) $pos = tell DAT; # actual position Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
436 Dateien Binärdateien Lesen: open DAT, $file; binmode DAT; # platform! read DAT, $buf, $length; close DAT; Positionieren: Schreiben: open OUT, ">$result"; binmode OUT; print OUT $buf; close OUT; open DAT, $file; read DAT, $buf, $length; seek DAT, 8, 0; # position to byte 8 # 0 - from beginning # 1 - relative to position # 2 - from end (normally negative) $pos = tell DAT; # actual position Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
437 Dateien Binärdateien Lesen: open DAT, $file; binmode DAT; # platform! read DAT, $buf, $length; close DAT; Positionieren: Schreiben: open OUT, ">$result"; binmode OUT; print OUT $buf; close OUT; open DAT, $file; read DAT, $buf, $length; seek DAT, 8, 0; # position to byte 8 # 0 - from beginning # 1 - relative to position # 2 - from end (normally negative) $pos = tell DAT; # actual position Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
438 Dateien Binärdaten wandeln open DAT, $file; read DAT, $buf, = unpack("c4llnv", $buf); # Endianess my $buf = pack("csl", 7, 42, 12345); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
439 Dateien Binärdaten wandeln open DAT, $file; read DAT, $buf, = unpack("c4llnv", $buf); # Endianess my $buf = pack("csl", 7, 42, 12345); Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
440 Dateien pack/unpack Formate Format A c/c s/s l/l N V f/d u x Bedeutung Text/Zeichenkette signed/unsigned char signed/unsigned short signed/unsigned long unsigned long in big Endian unsigned long in little Endian float/double in nativem Format String uuencodiert Null Byte Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
441 Dateien Übungen Schreiben Sie ein Programm, dass die Dateigrößen aller Files aus ARGV bestimmt, addiert und ausgibt. Sortieren Sie die Dateien aus ARGV nach Alter. Bei gleichem Alter sortieren Sie alphabetisch. Erstellen Sie eine Binärdatei, in der Sie den Wert der Zahl 42 im nativen Format speichern. Lesen Sie diese Datei auf einer Plattform mit anderer Endianess ein. Welchen Wert enthält die Datei? PNG-Dateien enthalten ab der Byteposition 16 die Breite und die Höhe des Bildes als big endian long. Schreiben Sie ein Programm, das für gegebene PNG-Dateien die Bildbreite und -höhe ausgibt. Überprüfen Sie, ob in den ersten 16 Bytes der String PNG steht! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
442 Verzeichnisse Dateisystem Navigation chdir "/bin" or die "can t cd: $!"; use Cwd; # package my $dir = getcwd; # where am I? use Cwd realpath ; my $abs_path = realpath $dir; aktuelles Verzeichnis festlegen/abfragen Schreiben Sie ein Programm cd.pl. Kann es das Kommando cd ersetzen? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
443 Verzeichnisse Dateisystem Navigation chdir "/bin" or die "can t cd: $!"; use Cwd; # package my $dir = getcwd; # where am I? use Cwd realpath ; my $abs_path = realpath $dir; aktuelles Verzeichnis festlegen/abfragen Schreiben Sie ein Programm cd.pl. Kann es das Kommando cd ersetzen? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
444 Verzeichnisse Dateisystem Navigation chdir "/bin" or die "can t cd: $!"; use Cwd; # package my $dir = getcwd; # where am I? use Cwd realpath ; my $abs_path = realpath $dir; aktuelles Verzeichnis festlegen/abfragen Schreiben Sie ein Programm cd.pl. Kann es das Kommando cd ersetzen? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
445 Verzeichnisse Dateisystem Navigation chdir "/bin" or die "can t cd: $!"; use Cwd; # package my $dir = getcwd; # where am I? use Cwd realpath ; my $abs_path = realpath $dir; aktuelles Verzeichnis festlegen/abfragen Schreiben Sie ein Programm cd.pl. Kann es das Kommando cd ersetzen? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
446 Verzeichnisse Dateisystem Navigation chdir "/bin" or die "can t cd: $!"; use Cwd; # package my $dir = getcwd; # where am I? use Cwd realpath ; my $abs_path = realpath $dir; aktuelles Verzeichnis festlegen/abfragen Schreiben Sie ein Programm cd.pl. Kann es das Kommando cd ersetzen? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
447 Verzeichnisse Verzeichniseinträge = = glob("/[a-m]?[f-z]*/??[a-g]*.*") relativer/absoluter Pfad Unterschied zu regulären Ausdrücken (alte)alternative = <*.txt> Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
448 Verzeichnisse Verzeichniseinträge = = glob("/[a-m]?[f-z]*/??[a-g]*.*") relativer/absoluter Pfad Unterschied zu regulären Ausdrücken (alte)alternative = <*.txt> Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
449 Verzeichnisse Verzeichniseinträge = = glob("/[a-m]?[f-z]*/??[a-g]*.*") relativer/absoluter Pfad Unterschied zu regulären Ausdrücken (alte)alternative = <*.txt> Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
450 Verzeichnisse Verzeichniseinträge = = glob("/[a-m]?[f-z]*/??[a-g]*.*") relativer/absoluter Pfad Unterschied zu regulären Ausdrücken (alte)alternative = <*.txt> Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
451 Verzeichnisse Verzeichniseinträge = = glob("/[a-m]?[f-z]*/??[a-g]*.*") relativer/absoluter Pfad Unterschied zu regulären Ausdrücken (alte)alternative = <*.txt> Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
452 Verzeichnisse Directory-Handles opendir D, "/home" or die "can t open dir: $!"; for ( readdir D ) { print "$_"; } rewinddir D; # once again... closedir D; effizienter als Globbing keine Sortierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
453 Verzeichnisse Directory-Handles opendir D, "/home" or die "can t open dir: $!"; for ( readdir D ) { print "$_"; } rewinddir D; # once again... closedir D; effizienter als Globbing keine Sortierung Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
454 Verzeichnisse Verzeichnis-Traversierung use File::Find; sub wanted { print if -s $_ > 1000; } find \&wanted, "/home"; rekursive Traversierung Verwaltung vieler offener Directory-Handles Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
455 Verzeichnisse Verzeichnis-Traversierung use File::Find; sub wanted { print if -s $_ > 1000; } find \&wanted, "/home"; rekursive Traversierung Verwaltung vieler offener Directory-Handles Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
456 Verzeichnisse Verzeichnis-Traversierung use File::Find; sub wanted { print if -s $_ > 1000; } find \&wanted, "/home"; rekursive Traversierung Verwaltung vieler offener Directory-Handles Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
457 Verzeichnisse Dateien löschen unlink "data.txt"; unlink "directory" or warn "use rmdir"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
458 Verzeichnisse Dateien löschen unlink "data.txt"; unlink "directory" or warn "use rmdir"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
459 Verzeichnisse Dateien löschen unlink "data.txt"; unlink "directory" or warn "use rmdir"; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
460 Verzeichnisse Dateien umbenennen for $old ) { my $new = $old; $new =~ s/ //g; # delete white space # from file name next if $new eq $old; rename $old, $new; } rename "file", "/far/away"; # move Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
461 Verzeichnisse Dateien umbenennen for $old ) { my $new = $old; $new =~ s/ //g; # delete white space # from file name next if $new eq $old; rename $old, $new; } rename "file", "/far/away"; # move Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
462 Verzeichnisse Verzeichnisse erstellen, löschen und modifizieren mkdir "dir", 0755; # Permissions # if empty chmod 0664, "file.dat"; chown $user, Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
463 Verzeichnisse Verzeichnisse erstellen, löschen und modifizieren mkdir "dir", 0755; # Permissions # if empty chmod 0664, "file.dat"; chown $user, Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
464 Verzeichnisse Verzeichniseinträge Namensbestandteile use File::Basename; $fullname = basename $file; $name = basename $file, ".txt", ".dat"; $path = dirname $file; use File::Basename qw/ /; # don t import anything $fullname = File::Basename::basename $file; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
465 Verzeichnisse Verzeichniseinträge Namensbestandteile use File::Basename; $fullname = basename $file; $name = basename $file, ".txt", ".dat"; $path = dirname $file; use File::Basename qw/ /; # don t import anything $fullname = File::Basename::basename $file; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
466 Verzeichnisse Namen plattformunabhängig OO-Style use File::Spec; my $file = "work.txt"; = qw/ home user data /; my $fullname = File::Spec->catfile(@dir, $file); Methodenaufruf: Package -> Methode Dokumentation: perldoc File::Spec Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
467 Verzeichnisse Namen plattformunabhängig OO-Style use File::Spec; my $file = "work.txt"; = qw/ home user data /; my $fullname = File::Spec->catfile(@dir, $file); Methodenaufruf: Package -> Methode Dokumentation: perldoc File::Spec Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
468 Verzeichnisse Namen plattformunabhängig OO-Style use File::Spec; my $file = "work.txt"; = qw/ home user data /; my $fullname = File::Spec->catfile(@dir, $file); Methodenaufruf: Package -> Methode Dokumentation: perldoc File::Spec Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
469 Verzeichnisse Übungen Schreiben Sie ein Programm, dass die Dateien löscht, welche über die Kommandozeile angegeben sind. Schreiben Sie ein Programm, das eine Datei umbenennt, wenn zwei Dateinamen gegeben sind; Dateien in ein Zielverzeichnis verschiebt. Schreiben Sie ein Programm, das aus den gegebenen Dateinamen Leerzeichen entfernt, Groß- in Kleinbuchstaben wandelt. Schreiben Sie ein Programm, dass für alle gegebenen Dateien ein bestehendes Suffix gegen einen neuen Extender austauscht. Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
470 Prozess-Management und -kommunikation Programm-Aufrufe system Aufruf externer Programme aufgerufene Programme nutzen Standard-I/O-Kanäle des rufenden Prozesses system("date"); # per Shell system("zip archiv *.txt"); # globbing by Shell # direct call system("zip", "archiv", "*.txt"); # oops Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
471 Prozess-Management und -kommunikation Programm-Aufrufe system Aufruf externer Programme aufgerufene Programme nutzen Standard-I/O-Kanäle des rufenden Prozesses system("date"); # per Shell system("zip archiv *.txt"); # globbing by Shell # direct call system("zip", "archiv", "*.txt"); # oops Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
472 Prozess-Management und -kommunikation Programm-Aufrufe system Aufruf externer Programme aufgerufene Programme nutzen Standard-I/O-Kanäle des rufenden Prozesses system("date"); # per Shell system("zip archiv *.txt"); # globbing by Shell # direct call system("zip", "archiv", "*.txt"); # oops Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
473 Prozess-Management und -kommunikation Programm-Aufrufe system Aufruf externer Programme aufgerufene Programme nutzen Standard-I/O-Kanäle des rufenden Prozesses system("date"); # per Shell system("zip archiv *.txt"); # globbing by Shell # direct call system("zip", "archiv", "*.txt"); # oops Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
474 Prozess-Management und -kommunikation Kommandoausgaben Backquotes Weiterverarbeiten der Ausgabe externer Programme $now = date = perldoc -t -f sin # Liste; system() verwenden, wenn Ausgabe nicht interessiert Problem bei Dialogprogrammen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
475 Prozess-Management und -kommunikation Kommandoausgaben Backquotes Weiterverarbeiten der Ausgabe externer Programme $now = date = perldoc -t -f sin # Liste; system() verwenden, wenn Ausgabe nicht interessiert Problem bei Dialogprogrammen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
476 Prozess-Management und -kommunikation Kommandoausgaben Backquotes Weiterverarbeiten der Ausgabe externer Programme $now = date = perldoc -t -f sin # Liste; system() verwenden, wenn Ausgabe nicht interessiert Problem bei Dialogprogrammen Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
477 Prozess-Management und -kommunikation Environment Umgebungsvariable des Prozesses: PATH usw. Zugriff per Hash ENV: $path = $ENV{ PATH }; delete $ENV{ PATH }; $ENV{ PATH }.= ":."; # dangerous $ENV{ NOTE } = interessant ; Vererbung an gerufene Prozesse Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
478 Prozess-Management und -kommunikation Environment Umgebungsvariable des Prozesses: PATH usw. Zugriff per Hash ENV: $path = $ENV{ PATH }; delete $ENV{ PATH }; $ENV{ PATH }.= ":."; # dangerous $ENV{ NOTE } = interessant ; Vererbung an gerufene Prozesse Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
479 Prozess-Management und -kommunikation Prozesse als File-Handles Standard-I/O von Prozessen als File-Handles; Von Fremdprozess lesen: open D, date ; # launch process $now = <D>; close D; # terminate other process Zum Fremdprozess schreiben: open M, mail ; print M "subject: Perl\n"; open P, prog ; # Oops - only ONE pipe! Unterschied zu Backquotes: open F, "find / -type f "; # run as separate process while ( <F> ) { print "found file $_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
480 Prozess-Management und -kommunikation Prozesse als File-Handles Standard-I/O von Prozessen als File-Handles; Von Fremdprozess lesen: open D, date ; # launch process $now = <D>; close D; # terminate other process Zum Fremdprozess schreiben: open M, mail ; print M "subject: Perl\n"; open P, prog ; # Oops - only ONE pipe! Unterschied zu Backquotes: open F, "find / -type f "; # run as separate process while ( <F> ) { print "found file $_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
481 Prozess-Management und -kommunikation Prozesse als File-Handles Standard-I/O von Prozessen als File-Handles; Von Fremdprozess lesen: open D, date ; # launch process $now = <D>; close D; # terminate other process Zum Fremdprozess schreiben: open M, mail ; print M "subject: Perl\n"; open P, prog ; # Oops - only ONE pipe! Unterschied zu Backquotes: open F, "find / -type f "; # run as separate process while ( <F> ) { print "found file $_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
482 Prozess-Management und -kommunikation Prozesse als File-Handles Standard-I/O von Prozessen als File-Handles; Von Fremdprozess lesen: open D, date ; # launch process $now = <D>; close D; # terminate other process Zum Fremdprozess schreiben: open M, mail ; print M "subject: Perl\n"; open P, prog ; # Oops - only ONE pipe! Unterschied zu Backquotes: open F, "find / -type f "; # run as separate process while ( <F> ) { print "found file $_\n"; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
483 Prozess-Management und -kommunikation Netzwerk TCP-Client #!/usr/bin/perl -w use IO::Socket; $remote = IO::Socket::INET->new( Proto => "tcp", PeerAddr => shift "localhost", PeerPort => shift 2345, ) or die "cannot connect"; while ( <$remote> ) { print } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
484 Prozess-Management und -kommunikation Netzwerk TCP-Server (multithreaded) #!/usr/bin/perl -w use IO::Socket; $server = IO::Socket::INET-> new( Proto => tcp, LocalPort => shift 2345, Listen => SOMAXCONN, Reuse => 1 ) or die "can t setup server"; while ($client = $server->accept()) { if ( $pid = fork ) { # parent or child? close $client; next; } printf "Connect from %s\n", $client->peerhost; while ( 1 ) { print $client localtime(). "\n"; sleep 1; } } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
485 Prozess-Management und -kommunikation Übungen Rufen Sie das Programm date aus einem Perlprogramm heraus aus! Lösen Sie die gleiche Aufgabe, nachdem Sie die PATH-Variable in Ihrem Perl-Programm gelöscht haben! Lassen Sie Ihr Programm die Ausgabe des Kommandos date interpretieren und den aktuellen Tag des Monats ausgeben! Erweitern Sie den TCP-Server so, dass er vom Client die Verzögerungszeit in der Schleife entgegennimmt. Diese Zeit sollte nie Null werden! Warum? Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
486 Referenzen erweitert Eval Block Evaluation Fehler abfangen fatale Fehler: eval { $x / $y }; warn $@ if $@ Syntaxfehler zur Laufzeit: $re = [abc) ; eval { m/$re/ }; String Evaluation Zugang zur zentralen Interpreterfunktion selbstmodifizierender Code problematisch Erzeugen von Variablen zur Laufzeit: $cmd = $x = 42 ; eval $cmd; symbolische Referenz: $r = foo ; $$r = 42; print $foo; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
487 Referenzen erweitert Eval Block Evaluation Fehler abfangen fatale Fehler: eval { $x / $y }; warn $@ if $@ Syntaxfehler zur Laufzeit: $re = [abc) ; eval { m/$re/ }; String Evaluation Zugang zur zentralen Interpreterfunktion selbstmodifizierender Code problematisch Erzeugen von Variablen zur Laufzeit: $cmd = $x = 42 ; eval $cmd; symbolische Referenz: $r = foo ; $$r = 42; print $foo; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
488 Referenzen erweitert Eval Block Evaluation Fehler abfangen fatale Fehler: eval { $x / $y }; warn $@ if $@ Syntaxfehler zur Laufzeit: $re = [abc) ; eval { m/$re/ }; String Evaluation Zugang zur zentralen Interpreterfunktion selbstmodifizierender Code problematisch Erzeugen von Variablen zur Laufzeit: $cmd = $x = 42 ; eval $cmd; symbolische Referenz: $r = foo ; $$r = 42; print $foo; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
489 Referenzen erweitert Übungen Erzeugen Sie mittels eval die Variablen $a $z und belegen Sie diese mit 1 26! Lösen Sie die vorherige Aufgabe mittels symbolischer Referenzen! Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
490 Grafische Oberflächen GUI Hello World #!/usr/bin/perl use Tk; # borrowed from TCL/Tk # implemented by # Nick Ing Simmons $top = MainWindow->new; # OO-style $hello = $top->button( -text => "hello", -command => sub{ print "Ciao\n"; exit }, ); # attributes in a hash $hello->pack; # geometry management MainLoop; # event handling Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
491 Grafische Oberflächen Editor Methode Datei laden $file = "empty"; sub fsel { $file = $top->fileselect->show; } sub load { my ($t) $t->delete( "1.0", "end" ); fsel; if (!open (FH, $file)) { my $d = $top->dialog( -text => "Tja!" )->Show; } else { while (<FH>) { $t->insert("end", $_); } close FH; } } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
492 Grafische Oberflächen Editor Methode Datei sicheren sub save { my ($t) open (FH, ">$file"); print FH $t->get("1.0", "end"); close (FH); } sub saveas { my ($t) fsel; save $t; } Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
493 Grafische Oberflächen Editor in 99 Zeilen use Tk; use Tk::FileSelect; $top = MainWindow->new; $top->title($file); $menu = $top->frame( -relief => raised, -borderwidth => 2 ); $menu->pack(-fill => x ); my $f = $menu->menubutton( -text => File, -underline => 0 ); $f->command( -label => Open, -command => sub { load $text } ); $f->command( -label => Save, -command => sub { save $text } ); $f->command( -label => Save as, -command => sub { saveas $text } ); #... Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
494 Grafische Oberflächen Editor Hauptschleife #... $f->separator; $f->command( -label => Quit, -command => sub { exit 0 } ); $f->pack(-side => left ); $text = $top->scrolled( "Text", -scrollbars => oe, -width => 80, -height => 25, -font => -*-courier-*--18-* )->pack; MainLoop; Prof. Dr.-Ing. Torsten Finke (FOM) Scriptorientierte Programmiertechnik Perl / 187
Programmierung in C. Grundlagen. Stefan Kallerhoff
Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
MehrEinführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
MehrEinführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte
MehrDiana Lange. Generative Gestaltung Operatoren
Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.
MehrEinführung in die C++ Programmierung für Ingenieure
Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF
MehrC-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)
C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) 1. Aufgabe 6 Punkte Geben Sie Definitionen an für: float var; 1 a) eine float-variable var: b) einen Zeiger pvar, der float *pvar = &var; 1 auf die
MehrMASCHINELLE SPRACHVERARBEITUNG Gertrud Faaß Basierend auf Folien von Dr. H Zinsmeister. Einführung in PERL
Einführung in PERL BASIEREND AUF FOLIEN VON DR. H. ZINSMEISTER und dem Buch `Einführung in Perl (Lama Buch) von RL Schwartz&T Phoenix Gertrud Faaβ Universität StuVgart, InsXtut für maschinelle Sprachverarbeitung
MehrErwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
MehrDatentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache
Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert
MehrLinux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe,
MehrEinführung in die Programmierung
Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und
MehrModellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {
MehrModul 122 VBA Scribt.docx
Modul 122 VBA-Scribt 1/5 1 Entwicklungsumgebung - ALT + F11 VBA-Entwicklungsumgebung öffnen 2 Prozeduren (Sub-Prozeduren) Eine Prozedur besteht aus folgenden Bestandteilen: [Private Public] Sub subname([byval
MehrKlausur in Programmieren
Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)
MehrComputeranwendung und Programmierung (CuP)
Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag
MehrTutorium Rechnerorganisation
Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
MehrProgrammieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff
Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind
Mehr5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu
Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten
MehrDer Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
Mehr1. Übung zu "Numerik partieller Differentialgleichungen"
1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:
MehrEinführung in die C-Programmierung
Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).
MehrI.1 Die Parrot Assemblersprache
I.1 Die Parrot Assemblersprache Die virtuelle CPU Parrot ermöglicht die Verarbeitung der Parrot Assemblersprache (PASM). Zum Einstieg soll ein erstes Beispiel die Ausführung einer PASM-Datei zeigen. Legen
MehrE-PRIME TUTORIUM Die Programmiersprache BASIC
E-PRIME TUTORIUM Die Programmiersprache BASIC BASIC Beginner s All-purpose Symbolic Instruction Code symbolische Allzweck-Programmiersprache für Anfänger Design-Ziel klar: Eine einfache, für Anfänger geeignete
MehrKontrollstrukturen und Funktionen in C
Kontrollstrukturen und Funktionen in C Lernziele: Vertiefen der Kenntnisse über Operatoren, Kontrollstrukturen und die Verwendung von Funktionen. Aufgabe 1: Quickies: Datentypen in C a) Was sind die elementaren
MehrFunktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen
Grundlagen der Programmierung Prof. H. Mössenböck 3. Verzweigungen If-Anweisung n > 0? j n if (n > 0) x = x / n; ohne else-zweig x x / n j max x x > y? n max y if (x > y) max = x; else max = y; mit else-zweig
MehrGraphic Coding. Klausur. 9. Februar 2007. Kurs A
Graphic Coding Klausur 9. Februar 2007 Kurs A Name: Matrikelnummer: Hinweise - Es sind keine Hilfsmaterialien erlaubt. (Keine Bücher, Taschenrechner, Handys) - Sie haben zwei Stunden Zeit. - Insgesamt
MehrEinfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"
MehrIT-Basics 2. DI Gerhard Fließ
IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte
MehrJava Kurs für Anfänger Einheit 2 Datentypen und Operationen
Java Kurs für Anfänger Einheit 2 Datentypen und Operationen Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 16. Mai 2009 Inhaltsverzeichnis
MehrKontrollstrukturen, Strukturierte Programmierung
, Strukturierte Programmierung Steuer- und Kontrollfluss Strukturierte Programmierung Arten von Strukturblöcken Sequenz Alternative Iteration C-Spezifisches Seite 1 Elementare Algorithmen SelectionSort
MehrDeklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
MehrInformatik Grundlagen, WS04, Seminar 13
Informatik Grundlagen, WS04, Seminar 13 Informatik Informatik Grundlagen, Seminar 13 WS04 1 Was wir heute besprechen Nachbesprechen von Übungsblatt 11 Rekursion Grundprinzipien Übung Besprechung Übungsblatt
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
MehrWintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18
Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.
MehrProgrammieren in Haskell Einführung
Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:
MehrInformatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692
Informatik Repetitorium SS 2009 Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692 Operatoren und Datentypen Beispiel: Anweisungen Variable int a float b int c a= a % (int) (++b-1/4) Vorher 36 3.5 c=b
MehrAutor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH
Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich
MehrJava Einführung VARIABLEN und DATENTYPEN Kapitel 2
Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen
MehrProgrammieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff
Programmieren in C C Syntax Datentypen, Operatoren und Kontrollstrukturen Prof. Dr. Nikolaus Wulff Elementare Typen Imperative und objektorientierte Programmiersprachen bieten i.d.r. einen Satz elementarer
MehrKlausur in Programmieren
Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2009, 16. Juli 2009 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:
MehrÜbersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!
!!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!! Erste Zeile eines PERL-Scripts: #! /usr/bin/perl Variablen in PERL: Normale Variablen beginnen mit einem $-Zeichen Array-Variablen beginnen mit
MehrHochschule München, FK 03 FA SS 2012. Ingenieurinformatik
Hochschule München, FK 03 FA SS 2012 Ingenieurinformatik Zulassung geprüft vom Aufgabensteller: Teil 1/Aufgabe 1: 30 Minuten ohne Unterlagen, Teil 2/Aufgaben 2-4: 60 Minuten, beliebige eigene Unterlagen
MehrEine Beschreibung des Programms und der dahinter stehenden Philosophie.
1 Geschichte Larry Wall schrieb ein Konfigurationsmanagementsystem und benötigte dazu ein Berichtwerkzeug, das mehrere Dateien gleichzeitig öffnen konnte. Awk konnte es damals nicht, daher schrieb er eine
MehrIT-Zertifikat: Allgemeine Informationstechnologien II PHP
IT-Zertifikat: Allgemeine Informationstechnologien II PHP PHP ( PHP: Hypertext Preprocessor ) ist eine serverseitige Skriptsprache: Der PHP-Code wird nicht wie bei JavaScript auf dem Clientrechner ausgeführt,
MehrZählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
MehrZusammenfassung des Handzettels für Programmieren in C
Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.
MehrErweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
MehrESP Tutorium. Studienassistent: Ewald Moitzi. E-Mail: prog-tutor-ewald@iicm.edu. Gruppe 9
ESP Tutorium Studienassistent: Ewald Moitzi E-Mail: prog-tutor-ewald@iicm.edu Gruppe 9 Plan für Heute Zip am pluto Datentypen? If, Schleifen Debugging Fehlerquellen Compiler-Fehlermeldungen Fehlersuche
MehrC++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet
C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()
MehrMultimedia im Netz Wintersemester 2011/12
Multimedia im Netz Wintersemester 2011/12 Übung 01 Betreuer: Verantwortlicher Professor: Sebastian Löhmann Prof. Dr. Heinrich Hussmann Organisatorisches 26.10.2011 MMN Übung 01 2 Inhalte der Übungen Vertiefung
MehrEiP Übung 12.12.2014
Musterlösung zu Blatt 9: 1. Rechnen sie folgende Zahlen in Binärzahlen, Oktalzahlen und Hexadezimalzahlen um: a) 15, b) 22, c) 256, d) 512, e) 1024, f) 2048 (freiwillige Zusatzaufgabe: Gibt es eine Möglichkeit
MehrII. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
MehrInhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.
1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Darstellung von Algorithmen Aus den Einführungsbeispielen und
MehrDie Programmiersprache C
Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,
MehrUnterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur
Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert
MehrHochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe
Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten
MehrEinführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005
Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung
Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:
MehrEinführung in die Programmierung (EPR)
Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.
MehrDatenbanken Microsoft Access 2010
Datenbanken Microsoft Access 2010 Abfragen Mithilfe von Abfragen kann ich bestimmte Informationen aus einer/mehrerer Tabellen auswählen und nur diese anzeigen lassen die Daten einer/mehrerer Tabellen sortieren
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrHello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.
Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike
MehrJava Kurs für Anfänger Einheit 4 Klassen und Objekte
Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse
MehrKontrollstrukturen. Bedingter Ablauf: if. Bedingter Ablauf: if-else
Kontrollstrukturen 1. Bedingter Ablauf: if, if-else 2. Blöcke von Code 3. Wiederholungsschleife: for mit Inkrement und Dekrement Operatoren 4. erweiterte Eigenschaften von printf() 5. Die relationalen
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
MehrGrundlagen der Programmiersprache C++
/ TU Braunschweig Grundlagen der Programmiersprache C++ Um den Studierenden den Einstieg in die FE-Programmierung zu erleichtern werden die wesentlichen Elemente eines C-Programmes beschrieben, soweit
MehrÜbersicht Programmablaufsteuerung
Übersicht Programmablaufsteuerung Konditionale Verzweigung: if - else switch-anweisung Schleifenkonstrukte: while, do - while for Schleife Sprung-Anweisungen: break, continue, goto, return Anweisungen
MehrJAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert
MehrPrinzipien der Softwareentwicklung S. Strahringer
Gliederung 1 Einführung Was ist ein Programm? Vorteile (und Nachteile) von PHP Erste PHP-Programme Ausführung von PHP-Programmen 2 Grundbegriffe der Programmierung Anweisungen, Variablen, Datentypen und
MehrKontrollstrukturen - Universität Köln
Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,
MehrProjektverwaltung Problem Lösung: Modulare Programmierung
Projektverwaltung Problem Der Sourcecode ür ein Programm wird immer länger und unübersichtlicher Eine Funktion, die in einem alten Projekt verwendet wurde, soll auch in einem neuen Projekt verwendet werden
MehrProgrammiertechnik Operatoren, Kommentare, Ein-/Ausgabe
Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was sind Operatoren? Ein Operator ist eine in die Programmiersprache eingebaute Funktion,
MehrKlausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.
Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert
MehrVorlesung Informatik II
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm
MehrGrundlagen von C. Ausarbeitung von Jonas Gresens
Grundlagen von C Ausarbeitung von Jonas Gresens 1 Allgemein Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und
MehrGrundlagen der Informatik I Informationsdarstellung
Grundlagen der Informatik I Informationsdarstellung Einführung in die Informatik, Gumm, H.-P./Sommer, M. Themen der heutigen Veranstaltung. ASCIi Code 2. Zeichenketten 3. Logische Operationen 4. Zahlendarstellung
Mehr5.4 Klassen und Objekte
5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen
MehrEntwurf von Algorithmen - Kontrollstrukturen
Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer
MehrDie Programmiersprache C99: Zusammenfassung
Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach
MehrPython Programmierung. Dipl.-Ing.(FH) Volker Schepper
Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013
MehrCGI Programmierung mit Ha. Markus Schwarz
CGI Programmierung mit Ha Markus Schwarz Überblick Was ist funktionale Programmierung Einführung in Haskell CGI-Programmierung mit Haskell Ein etwas größeres Beispiel Was ist funktionale Programm Ein Programm
MehrFallunterscheidung: if-statement
Fallunterscheidung: if-statement A E 1 E 2 V 1 V 2 Syntax: if ( ausdruck ) Semantik: else anweisungsfolge_1 anweisungsfolge_2 1. Der ausdruck wird bewertet 2. Ergibt die Bewertung einen Wert ungleich 0
MehrPython Programmieren. Variablen, Ausdrücke und Anweisungen
Python Programmieren Funktionen Module und Namensräume Datentypen in Python Was noch zu sagen bleibt... richard rascher-friesenhausen Programmierung SS 12 Daten: Wert und Typ Variablen Variablennamen und
MehrPropädeutikum. Dipl.-Inf. Frank Güttler
Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik
MehrTypdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
MehrProgrammieren für Ingenieure Sommer 2015. Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.
Programmieren für Ingenieure Sommer 2015 Andreas Zeller, Universität des Saarlandes Ein Rechner Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet. Rechner sind überall Ihr Rechner
MehrDatenbanken 1. Einführung und Zugänge für die eingesetzten Resourcen. ISWeb - Information Systems & Semantic Web University of Koblenz Landau, Germany
University of Koblenz Landau, Germany Einführung und Zugänge für die eingesetzten Resourcen of 20 Überblick Eingesetzte Resourcen und ihre Zugänge WebCT FTP-Server PHP PostgreSQL
Mehr1.4.12 Sin-Funktion vgl. Cos-Funktion
.4. Sgn-Funktion Informatik. Semester 36 36.4.2 Sin-Funktion vgl. Cos-Funktion Informatik. Semester 37 37 .4.3 Sqr-Funktion Informatik. Semester 38 38.4.4 Tan-Funktion Informatik. Semester 39 39 .5 Konstanten
MehrAuswahlabfragen mit ACCESS
Auswahlabfragen mit ACCESS Abfragekriterien und Operatoren Beim Entwerfen von ACCESS-Auswahlabfragen (queries) sind definierte Abfragekriterien bzw. Operatoren zu benutzen. Ein Abfragekriterium ist eine
MehrDas erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.
Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen
MehrAccess 2010. Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012. inkl. zusätzlichem Übungsanhang ACC2010-UA
Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012 Access 2010 Grundlagen für Anwender inkl. zusätzlichem Übungsanhang ACC2010-UA 3 Access 2010 - Grundlagen für Anwender 3 Daten in Formularen bearbeiten
MehrVisualBasic - Variablen
Typisch für alle Basic-Dialekte ist die Eigenschaft, dass Variablen eigentlich nicht deklariert werden müssen. Sobald Sie einen Bezeichner schreiben, der bisher nicht bekannt war, wird er automatisch angelegt
MehrPerl-Workshop, Teil II
Builtins Tastatureingabe Ingo Blechschmidt, Michael Hartmann 7. Februar 2007 Inhalt Builtins Tastatureingabe 1 Oft verwendete Funktionen Numerische Funktionen Stringfunktionen 2 Tastatureingabe Beispiel
MehrJAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage
MehrAlgorithmen mit Python
Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World
MehrLuis Kornblueh. May 22, 2014
Einführung in die Bash Luis Kornblueh KlosterCluster Team 2013/2014, Klosterschule May 22, 2014 1 / 17 Inhaltsverzeichnis Einführung in das Scripting Einfache Beispiele Kommandos ersetzen Bedingungen Tests
Mehr