Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Skriptsprache Perl (5) Wolfgang Friebel DESY Zeuthen.

Ähnliche Präsentationen


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

1 Die Skriptsprache Perl (5) Wolfgang Friebel DESY Zeuthen

2 Anmerkungen zu Teil 4 select zum Umschalten des aktuellen Streams $oldfh=select(STDERR); $|=1; select($oldfh); oder use IO::Handle; STDERR->autoflush(1); n select zum Warten auf einen bereiten Stream ruft Äquivalent zum System call select n Lesen eines Zeichens (auch Return!) ohne Return use Term::ReadKey; ReadMode 4; # Turn off controls keys while(not defined($key=ReadKey(-1))) {#get key} print "Get key $key\n"; ReadMode 0;

3 7. Prozesse und Signale n Hier behandelte Themen nur eingeschränkt für NT n Prozesse mit `...` und system schon besprochen n Prozeßkontrolle u.a. mit exec, fork, wait, kill, alarm n Benutzung erfordert korrekte Signalbehandlung n Interprozeßkommunikation (IPC) wird unterstützt u typisch für Client Server -> CPAN Module n Prozeß+Systeminteraktion gefährden Sicherheit u Überwachung mit taint checks (perl -T)

4 Signalbehandlung Liste bekannter Signale sind keys von %SIG __WARN__ und __DIE__ von perl definiert n Meiste Signale führen zum Abbruch der Skript Verhindern durch Funktionsname in $SIG{signal} u Funktion wird bei Auftreten des Signals ausgeführt sleep n wird durch SIGALARM vorzeitig beendet alarm n sendet Signal ALARM nach n Sekunden kill SIGNAL, pids sendet Signal an Prozesse u kill 0 liefert wahr, wenn pid vorhanden, tut sonst nix

5 fork und exec n fork erzeugt Kopie des eigenen Prozesses u fortan laufen 2 Prozesse statt 1 u Unterscheidung Kind/Elternprozeß durch Returnwert u Kind gibt 0, Elternprozeß gibt pid der Kopie zurück n exec verwandelt einen Prozeß in anderen Prozeß u von exec gibt es keine Rückkehr n Elternprozeß muß auf Ende des Kindes warten u wird mit wait oder waitpid realisiert u bei Unterlassung entstehen Zombies!!

6 Interprozeßkommunikation n Sehr komplexe Materie mit vielen Fehlerquellen n Kommunikation über F gemeinsamen Speicher (shared memory) F bidirektionale Pipes F Sockets (netzwerkfähige Pipes) n Beispiele in Perl Cookbook n Aber: meist sofort nutzbare Module auf CPAN n Überwiegend eingesetzt: Sockets

7 Socket-Kommunikation n Hauptsächlich für Client/Server Aufgaben benutzt n RPC::PlServer von CPAN verwenden u Vorteile: remote procedure calls unterstützt u Läuft sowohl auf NT als auch unter UNIX u Sicherheitsmechanismen eingebaut n In Zeuthen installiert

8 Unsichere Daten n Über Userinput, Aufrufparameter und Output externer Programme kommen Daten ins Programm n Perl bietet Kontrolle über diese tainted data (-T): Keine Wirkung von befleckten Daten auf externe Prozesse n Insbesondere CGI-Programme sollten mit -T laufen n Setuid/gid Perl Scripts laufen immer im -T Modus n Keine Garantie für Sicherheit im perl Code

9 Behandlung unsicherer Daten $line = <>; #tainted `echo $line`; #insecure, gibt Fehler mit -T n Entfernung des tainted-Status durch Verwendung von Regex Substrings $1, $2,... Setzen der Variablen $ENV{PATH}, $ENV{ENV},... exec prog, args statt exec prog args (mit 2. Form args noch durch shell modifizierbar) u Verwandlung einer unsicheren Pipe in ein sicheres exec: open IP, -| or exec echo, $tainted; statt open IP, $tainted|;

10 File locking n Perl bietet zwei Mechanismen: flock und fcntl n flock funktioniert nicht mit NFS n fcntl ist nicht auf allen Systemen installiert n Systeme mit fcntl nicht immer kompatibel besser alternative Mechanismen benutzen Gefahr: einige Programme beachten Alternative nicht n Empfehlung: wann immer möglich vermeiden

11 8. Fehler in Programmen n Vermeidung von Fehlern durch perl -w #Bug in perl: -w ist optional use strict; u Benutzung von CPAN Modulen u Verwendung von Beispielen aus Literatur (s.Teil 1) Teste zur Laufzeit (Rückkehrcodes etc., $?, $! ) n Abfangen von Fehlern zur Laufzeit Kompilierfehler mit eval string Laufzeitfehler mit eval { block }

12 Die Funktion eval n Argument von eval wird als Perltext betrachtet eval string Syntaxcheck zur Laufzeit eval { block } Syntaxcheck beim Kompilieren n Rückgabewert wie bei Subroutinen n Bei Laufzeitfehler kein Programmabbruch u dann Rückgabewert Null und $@ enthält die Fehlermeldung sonst ist $@ Null n Ähnlich zu try und catch aus C++

13 Fehlersuche Einfachste Methode: print benutzen n komfortables Drucken der Werte von Variablen mit use Dumpvalue; my $dumper = new Dumpvalue; $dumper->dumpValue($variable); $dumper->dumpvars('main'); #alle Variablen Tracing möglich, wenn Debugging einkompiliert (- D ) n Benutzung eines Debuggers (perl -d, ddd, ptkdb)

14 Perl Debugger ddd und ptkdb sind grafische Frontents für perl -d n emacs bietet ebenfalls Debug Unterstützung n ddd ist in Zeuthen installiert, ptkdb nicht Zum Ausprobieren von perl Befehlen: perl -de 0 n Wichtigste Debuggerbefehle (meist 1 Zeichen) h (help) n (next) s (step) t (trace mode) b (setze breakpoint) c (cont after break) p expr (print) x expr (extended print) q (quit)

15 Perl Optimierung n Regel 1: Dont optimize n Erstellung eines Ausführungsprofils perl -d:Dprof perlscript erzeugt profil dprofpp gibt Profilinfos aus n Benchmarking von Codestücken use Benchmark; $t = timethis($count, CODE); Info in Objekt $t enthalten, wird auch ausgegeben

16 Hausaufgaben n Schreibe ein Programm, das nur 5s auf Userinput wartet n Experimentiere nicht mit fork und exec n Schreibe Hallo World als Client/Server Programm (PlServer) n Ändere teil4.pl so, daß es mit perl -T läuft n Schreibe ein Programm, das Division durch Null abfängt Erstelle mit dumpvars eine Liste aller Programmvariablen n Wie schnell ist stat auf einigen verschiedenen Rechnern


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

Ähnliche Präsentationen


Google-Anzeigen