200 likes | 323 Views
Die Skriptsprache Perl. Wolfgang Friebel DESY Zeuthen. Inhalt des Kurses. Teil 1 Grundlegende Konzepte 1. Einführung 2. Datentypen 3. Kontrollstrukturen und Programmfluß 4. Reguläre Ausdrücke 5. Funktionen, I/O in Perl 6. Debugger, Profiler, Fehlerbehandlung
E N D
Die Skriptsprache Perl Wolfgang Friebel DESY Zeuthen
Inhalt des Kurses • Teil 1 Grundlegende Konzepte • 1. Einführung • 2. Datentypen • 3. Kontrollstrukturen und Programmfluß • 4. Reguläre Ausdrücke • 5. Funktionen, I/O in Perl • 6. Debugger, Profiler, Fehlerbehandlung • Teil 2 Objektorientiertes Perl • Teil 3 Wichtige Perl-Module (Tk, DBI, CGI)
1. Einführung • Literatur • Weitere Informationsquellen • Perl auf dem Computer • Perl Slogans • Einführendes Beispiel
Programming Perl (Camel) Learning Perl (Llama) Advanced Perl Programming Perl Cookbook (Ram) Object Oriented Perl Mastering Regular Expressions Effective Perl Programming Learning Perl/Tk Goto Perl5 (deutsch) Perl Einführg., Anwendg., Referenz Kurzreferenzen (perl, perl/Tk) Wall, Christiansen, Schwartz 1996 Schwartz, Christiansen 1997 Sriram Srinivasan 1997 Christiansen, Torkington 1997 Damian Conway 1999 Jeffrey Friedl 1997 Hall, Schwartz 1998 Nancy Walsh 1999 Michael Schilli Farid Hajji (2.Aufl) 2000 Vromans (perl), Lidie (perl/Tk) Literatur
Weitere Informationsquellen • Zeitschriften • The Perl Journal (TPJ) www.tpj.com • Artikel in iX, Linux Journal (deutsch und englisch) • Webadressen • www.perl.com - umfangreiches Archiv • www.perlmonth.com - online Zeitschrift • CPAN (Comprehensive Perl Archive Network) ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN • Newsgruppen • comp.lang.perl.*, de.lang.perl.*
Weitere Informationsquellen (2) • Vorträge und andere Dokumente (siehe auch www.perl.com) • Perl für UNIX und C-Kenner (F. Hajji, Köln 1997) • Perl5 by Example (M. Medinet) • Advanced topics in perl programming (Christiansen) • Practical Web Site Maintenance with Perl (Klein) • Perl Quick reference guide • Perl/Tk Pocket reference • Perl man pages (siehe nächste Seite)
Perl auf dem Computer • Version (perl -v), Installationsdetails (perl -V) Zur Zeit (1/2000) aktuell 5.005_03 ab 5.005 UNIX und NT Versionen aus einer Quelle • Online Information mit man und perldoc • perldoc bietet mehr als man • perldoc perl entspricht man perl • perldoc -f functionliefert Funktionsdefinition • perldoc perllocal - zusätzlich installierte Module • perldoc perlfaq liefert “FAQ’s” • perldoc DBD::mysql liefert Modulbeschreibung
Perl Slogans • Die 3 großen Programmierertugenden laziness, impatience and hubris • There is more than one way to do it (TMTOWTDI) Vergleich von natürlicher Sprache und Perl • Yet another perl hacker (CPAN/misc/japh) viele Programme, um diesen Spruch auszugeben • Far more than you ever wanted to know Reihe Artikelserie von T. Christiansen (u.a www.perl.com)
Einführendes Beispiel • perl -e ’print ”hello world!\n”’ (UNIX) • perl -e ”print qq(hello world!\n)” (NT) • Datei hallo.pl: #!/usr/local/bin/perl -w #-w ist dein Freund #Unser erstes Beispiel print ”Wie geht’s?\n”; $wie = <STDIN>; chomp $wie; print ”\u$wie? Naja Du arbeitest mit $^O\n”; perl -w hallo.pl
2. Datentypen • 3 grundlegende Datenformate (und Pointer) Strings, Integer, Double Precision Numbers (und Pointer) • Datentypen enthalten obige Formate Konstanten 123 “a” Referenzen \ Variablen $ Filehandles STDIN Listen () Formate HEADER Arrays @ Objekte $ Hashes %
Konstanten • Zahlen: keine Überraschungen (bis auf _) • 123, 0755, 0x1f, 3e10, 1.5e-6, 10_000 • Operationen mit Zahlen + - * / % ** ++ -- • Vergleiche < <= > >= == != <=> • Strings • nichtinterpretierte Strings: ’Wert: $100’ • interpretierte Strings: ”$wie geht’s\nJa\0” • Here-Dokumente ähnlich wie in UNIX Shells
Traditionell ’text’ #keine Interpolation ”$a\n” #Interpolation `ls -l`#Befehl (Interpol.) /match/#Pattern (Interpol.) Verallgemeinert q[] #beliebige Begrenzer qq{} #Klammern paarweise qx() # qw() #Wortweise Trennung m// #Pattern match qr() #Regexp (ab 5.005) Anführungszeichen
Konstanten (2) • Operationen mit Strings: • Verkettung mit . (Punkt) ’abc’.’def’ • Wiederholung mit x’#’ x 70 • Vergleiche mit Strings: • lt le gt ge eq ne cmp • Lange Strings mit Here Dokumenten: $lang = <<EOF; #oder <<”EOF”; $wie geht es? Versuche doch auch mal ’EOF’ und `EOF` EOF
Listen • Listen bestehen aus 0..n durch Komma getrennten und in Klammern eingeschlossenen Werten (1, 2, 3, ”abc”, 3.14) • Listenelemente können adressiert werden: (1, 2, 3, abc, 3.14)[1,3] • Listen können links vom Gleichheitszeichen stehen: ($a,$b) = ($b,$a); #Vertauschen • Es gibt viele Funktionen, die Listen bearbeiten
Variablen • keine Deklaration nötig, Anfangswert ist undef • kann mit use strict; verhindert werden • Skalare Variablen beginnen mit $, danach folgt ein Name $wie der Name kann _ und 0..9 enthalten $a_01 der Name kann ein Ausdruck sein, dann in {} Beispiel: ${”wi”.”e”} • Spezielle (skalare magische) Variablen haben ein Sonderzeichen als Name
Arrayvariablen • Arrayvariablen beginnen mit @, danach folgt ein Name @name = (”Friebel”, ”W.”); Index beginnt mit Null (genauer mit $[) Letzter Index von @name ist $#name (-1 wenn leer) • Elemente von Arrayvariablen werden mit [] indiziert und starten mit $, nicht mit @ $initial = $name[1]; • Spezielle (magische) Arrays z.B. @ARGV, @INC
Hashes • Hashes sind assoziative Arrays beginnen mit %, danach folgt ein Name statt mit Integer wird mit String (key) indiziert Hashes können auch mit Listen gefüllt werden %name = (´initial´, ´W.´, family => ´Friebel´); • Elemente von Hashes werden mit {} indiziert und starten mit $, nicht mit % $fname = $name{family};
Hashes (2) • Zugriff auf alle Elemente von Hashes erfolgt mit den Funktionen each, keys, values Reihenfolge der Einspeicherung bleibt nicht erhalten • Test ob Key/Value existiert erfolgt mit exists und defined • Spezielle (magische) Hashes z.B. %ENV, %SIG
Hausaufgaben • Welche speziellen Zeichenkonstanten gibt es? • Was ist der Wert von ”\n” in Windows? • Welche Bitoperatoren gibt es? • Welche Funktion ist äquivalent zu ”” bzw ’’? Die Antworten sind mit man perlop zu finden • Schreibe ein Programm mit Here Dokument • Welche magischen Variablen gibt es? (perlvar) • Wozu sind die Funktionen defined und undef gut?