Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen.

Ähnliche Präsentationen


Präsentation zum Thema: "Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen."—  Präsentation transkript:

1 Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen

2 Anmerkungen zum ersten Teil n Folgende man Pages wurden (teilweise) behandelt: u perlsyn, perlop, perldata, perlre, perlfunc, perlvar, perlsub, perlipc, perldebug, perlsec, perlrun, perlfaq n Folgende Module wurden (teilweise) besprochen: u POSIX, Date::Manip, Date::Format, Date::Parse, Getopt::Std, Getopt::Long, Term::ReadKey, Term::ReadLine, RPC::PlServer, Devel::Dprof, Dumpvalue, Benchmark

3 Inhalt des Kurses (2) n Teil 1 Grundlegende Konzepte n Teil 2 Objektorientiertes Perl u 1. Referenzen und Datenstrukturen u 2. Grundlagen der Objektorientierung u 3. Elemente der Objektorientierung in Perl u 4. Klassen und Vererbung u 5. Weiterführende Themen (tie, persistence) n Teil 3 Wichtige Perl Module

4 1. Referenzen und Datenstrukturen n Referenzen sind Zeiger auf Datentypen Notation durch vorangestelltes \ (z.B \@feld ) Referenzen passen in einen Skalar: $ref=\@feld; alle Datentypen können referenziert werden: \&sub Dereferenzierung mit Datentyp-Prefix ( $ @ % & ) @feld = @$ref; n Vorrangregeln durch {} modifizieren $element=${$ref}[0]; @feld=@{$refs[0]};

5 Dereferenzierung mit -> n Dereferenzierung mit Präfix unübersichtlich: ${$aref}[0] = ${$href}{key0}; n Arraynotation ist leserlicher: $aref->[0] = $href->{key0}; n Besonders nützlich bei Subroutine-Referenzen: statt &{$subref}($arg1, $arg2); schreibt man $subref->($arg1, $arg2);

6 Referenztyp Bestimmung des Typs mit ref $ref_var n ref liefert als Rückgabewert Typ der Referenz u undef, falls Argument keine Referenz u SCALAR, ARRAY,HASH,CODE als Referenztyp u REF, falls Referenz auf Referenz u Objektklasse für Objekt (siehe später) n Benutzung einer Referenz in String liefert Referenztyp und Adresse

7 Anonyme Arrays Feld wird definiert mit @feld=(1, 2, 3); Referenz auf Array $ptr=\@feld; Feldname wird für Zugriff nicht benötigt: $ptr->[0] n Anonymes Feld wird als Referenz auf Feld definiert $feld = [1, 2, 3]; # $feld ist Referenz @feld = (1, 2, 3); # normale Felddefinition Zugriff mit $feld->[1] = 2;

8 Mehrdimensionale Arrays n Bei Liste von Feldern verwischen Feldgrenzen: ((1,2,3), (4,5,6)) äquivalent zu (1,2,3,4,5,6) Daher besser: @matrix=(\@row1, \@row2); n Verwendung anonymer Arrays vereinfacht Notation $matrix = [ [1,2,3], [4,5,6] ]; n Zugriff mit Arraynotation $matrix->[1]->[2]; oder $matrix->[1][2];

9 Anonyme Hashes Hashdefinition mit %hash=(num=>1, str=>a); n Auch hier Name des Hashes nicht nötig n Anonymer Hash als Referenz auf Hash definiert $hash={num=>1, str=>a}; # $hash ist Ref @hash=(num=>1, str=>a); # normaler Hash Zugriff mit $hash->{num} = 2;

10 Datenstrukturen n Mehrdimensionale Hashes analog zu Arrays: {a=>{aa=>1, bb=>2}, b=>{aa=>2, cc=>3}} Zugriff analog: $hash->{b}{aa} = 2; n Gemischte Datenelemente (Records) n am besten als anonymer Hash mit Datenelementen u Keys sind Strings, Werte sind: u Skalare, anonyme Arrays, anonyme Hashes u Referenzen auf andere Datenstrukturen

11 Beispiel Datenstruktur $record = {familyname=>$name, firstnames=>\@names, accounts =>[$name, guest], access =>{linux=>accept, irix =>deny }, room =>1R06, }; login($record->{accounts}->[0]);

12 Pseudohashes n Neues Konzept in Perl5.005 n Zugriff auf Pseudohash wie auf Array oder Hash n Dazu bei Definition Zuordnung Key Index nötig: $pseudo = [ {a=>1, b=>2}, eins, zwei]; $pseudo->[1] #liefert eins $pseudo->{a} #liefert ebenfalls eins n Erlaubt Eingrenzung auf vordefinierte Keys Optimierung mit der Direktive use fields;

13 Anonyme Subroutinen Subroutine wird definiert mit sub name {block}; Aufruf name(args) oder &name(args) oder &name; Bei Aufruf mit &name; wird @_ übergeben u geeignet für Parameterweitergabe in Subroutine n Definition einer anonymen Subroutine $sub_ref = sub {block}; Aufruf mit $sub_ref->(args); n Wird für OO Programmierung mit Perl benutzt

14 Closures n Zugriff auf lokale Variablen mit Subroutine { my $count=0; sub incr { $count++; print $count\n} sub decr { $count--; print $count\n} } n Zugrif auf lokale Variable nur noch per Subroutine n Variable bleibt erhalten, da Referenzcount != 0 Keine Manipulationsmöglichkeit von $count

15 Parameterübergabe Übergabe per Referenz im Feld @_ Wird @_ modifiziert, so auch Aufrufargument n Vermeidung durch Kopie der Argumente my ($arg1, $arg2) = @_; n Übergabe von Feldern als Referenzen, sonst alle Argumente im ersten Array: matrix(@row1, @row2); # alle Elemente in @_ matrix(\@row1, \@row2); # @$_[0] = @row1;

16 Hausaufgaben n Erzeuge je eine Referenz auf Variable, Array und Hash n Benutze die zwei Methoden der Dereferenzierung n Schreibe eine Subroutine, die den Argumenttyp bestimmt n Erzeuge ein mehrdimensionales anonymes Array und arbeite damit n Erzeuge eine komplexe Datenstruktur mit einem anonymen Hash und bearbeite diese in einer Subroutine n Lies die manpages perlref und perldsc und perllol


Herunterladen ppt "Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen."

Ähnliche Präsentationen


Google-Anzeigen