Scriptorientierte Programmiertechnik Perl

Größe: px
Ab Seite anzeigen:

Download "Scriptorientierte Programmiertechnik Perl"

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 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/

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einfü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)

Mehr

Einführung in die Programmierung

Einfü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

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana 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.

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einfü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

Mehr

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

C-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

Mehr

MASCHINELLE SPRACHVERARBEITUNG Gertrud Faaß Basierend auf Folien von Dr. H Zinsmeister. Einführung in PERL

MASCHINELLE 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

Mehr

Erwin Grüner 09.02.2006

Erwin 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

Mehr

Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache

Datentypen. 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

Mehr

Linux Prinzipien und Programmierung

Linux 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,

Mehr

Einführung in die Programmierung

Einfü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

Mehr

Angewandte Mathematik und Programmierung

Angewandte 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

Mehr

Modellierung und Programmierung 1

Modellierung 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; {

Mehr

Modul 122 VBA Scribt.docx

Modul 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

Mehr

Klausur in Programmieren

Klausur 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)

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung 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

Mehr

Tutorium Rechnerorganisation

Tutorium 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

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren 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

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 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

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der 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.

Mehr

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Ü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:

Mehr

Einführung in die C-Programmierung

Einfü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).

Mehr

I.1 Die Parrot Assemblersprache

I.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

Mehr

E-PRIME TUTORIUM Die Programmiersprache BASIC

E-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

Mehr

Kontrollstrukturen und Funktionen in C

Kontrollstrukturen 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

Mehr

Funktionen 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: 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

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Grundlagen 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

Mehr

Graphic Coding. Klausur. 9. Februar 2007. Kurs A

Graphic 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

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache 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"

Mehr

IT-Basics 2. DI Gerhard Fließ

IT-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

Mehr

Java Kurs für Anfänger Einheit 2 Datentypen und Operationen

Java 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

Mehr

Kontrollstrukturen, Strukturierte Programmierung

Kontrollstrukturen, Strukturierte Programmierung , Strukturierte Programmierung Steuer- und Kontrollfluss Strukturierte Programmierung Arten von Strukturblöcken Sequenz Alternative Iteration C-Spezifisches Seite 1 Elementare Algorithmen SelectionSort

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen 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.

Mehr

Informatik Grundlagen, WS04, Seminar 13

Informatik 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

Mehr

Objektorientierte Programmierung

Objektorientierte 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

Mehr

Programmierkurs Java

Programmierkurs 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

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester 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.

Mehr

Programmieren in Haskell Einführung

Programmieren 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:

Mehr

Informatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692

Informatik 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

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: 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

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java 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

Mehr

Programmieren 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 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

Mehr

Klausur in Programmieren

Klausur 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!!!!

Ü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

Mehr

Hochschule München, FK 03 FA SS 2012. Ingenieurinformatik

Hochschule 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

Mehr

Eine Beschreibung des Programms und der dahinter stehenden Philosophie.

Eine 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

Mehr

IT-Zertifikat: Allgemeine Informationstechnologien II PHP

IT-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,

Mehr

Zählen von Objekten einer bestimmten Klasse

Zä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 --

Mehr

Zusammenfassung des Handzettels für Programmieren in C

Zusammenfassung 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.

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung 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

Mehr

ESP 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 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

Mehr

C++ 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 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()

Mehr

Multimedia im Netz Wintersemester 2011/12

Multimedia 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

Mehr

EiP Übung 12.12.2014

EiP Ü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

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. 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

Mehr

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Inhalt. 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

Mehr

Die Programmiersprache C

Die 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,

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. 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

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule 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

Mehr

Einfü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 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

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen 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.:

Mehr

Einführung in die Programmierung (EPR)

Einfü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.

Mehr

Datenbanken Microsoft Access 2010

Datenbanken 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

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

Hello 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. 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

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java 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

Mehr

Kontrollstrukturen. Bedingter Ablauf: if. Bedingter Ablauf: if-else

Kontrollstrukturen. 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

Mehr

Einführung in die Programmierung

Einfü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

Mehr

Grundlagen der Programmiersprache C++

Grundlagen 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 Übersicht Programmablaufsteuerung Konditionale Verzweigung: if - else switch-anweisung Schleifenkonstrukte: while, do - while for Schleife Sprung-Anweisungen: break, continue, goto, return Anweisungen

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA 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

Mehr

Prinzipien der Softwareentwicklung S. Strahringer

Prinzipien 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

Mehr

Kontrollstrukturen - Universität Köln

Kontrollstrukturen - 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,

Mehr

Projektverwaltung Problem Lösung: Modulare Programmierung

Projektverwaltung 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

Mehr

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Programmiertechnik 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,

Mehr

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Klausurteilnehmer. 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

Mehr

Vorlesung Informatik II

Vorlesung 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

Mehr

Grundlagen von C. Ausarbeitung von Jonas Gresens

Grundlagen 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

Mehr

Grundlagen der Informatik I Informationsdarstellung

Grundlagen 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

Mehr

5.4 Klassen und Objekte

5.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

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf 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

Mehr

Die Programmiersprache C99: Zusammenfassung

Die 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

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python 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

Mehr

CGI Programmierung mit Ha. Markus Schwarz

CGI 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

Mehr

Fallunterscheidung: if-statement

Fallunterscheidung: 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

Mehr

Python Programmieren. Variablen, Ausdrücke und Anweisungen

Python 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

Mehr

Propädeutikum. Dipl.-Inf. Frank Güttler

Propä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

Mehr

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Typdeklarationen. 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,

Mehr

Programmieren für Ingenieure Sommer 2015. Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Programmieren 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

Mehr

Datenbanken 1. Einführung und Zugänge für die eingesetzten Resourcen. ISWeb - Information Systems & Semantic Web University of Koblenz Landau, Germany

Datenbanken 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

Mehr

1.4.12 Sin-Funktion vgl. Cos-Funktion

1.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

Mehr

Auswahlabfragen mit ACCESS

Auswahlabfragen 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

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das 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

Mehr

Access 2010. Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012. inkl. zusätzlichem Übungsanhang ACC2010-UA

Access 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

Mehr

VisualBasic - Variablen

VisualBasic - 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

Mehr

Perl-Workshop, Teil II

Perl-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

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA 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

Mehr

Algorithmen mit Python

Algorithmen 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

Mehr

Luis Kornblueh. May 22, 2014

Luis 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