Perl Gotchas

Dieser Vortrag beschäftigt sich mit typischen Problemen beim Umgang mit Perl und wendet sich sowohl an Anfänger wie auch an erfahrene Entwickler.

Autor

Steffen Ullrich <Steffen_Ullrich@genua.de>

Abstract

Loop Variable in for ist Alias

Socket::inet_aton löst Namen auf

Block trotz nonblocking socket

Missbrauch von Funktionsprototypen I

Missbrauch von Funktionsprototypen II

Aber wozu dann überhaupt Prototypen?

our vs my vs vars

Scope ist Datei oder Block, nicht Package

 1 use strict;

 2 package A;
 3 my $my_var1 = 'A.my1';
 4 our $our_var1 = 'A.our1'; # geht auch mit vars

 5 {
 6   package B;
 7   my $my_var2 = 'B.my2';
 8   our $our_var2 = 'B.our2';
 9 }

10 package C;
11 print $my_var1;         # -> A.my1
12 print $our_var1;        # -> A.our1
13 ## print $my_var2;      # Syntaxfehler
14 ## print $our_var2;     # Syntaxfehler
15 print $B::my_var2;      # -> undef
16 print $B::our_var2;     # -> B.our2

Achtung bei @ISA und our!

Achtung beim Mixen use vars und our

.. und local?

local weist einer globalen Variable einen neuen Speicherplatz zu, den alten bekommt sie am Ende des Scopes wieder

.. und local? Beispiel

 1 sub show { print $_,"\n" }
 2 $_ = 10; show();            # -> 10

 3 { local $_ = 12; show() }   # -> 12
 4 show();                     # -> 10

 5 show() for ( 1,2,3,4 );     # for: macht $_ local: 1 2 3 4
 6 show();                     # -> 10

 7 { $_ = 100; show() }        # -> 100, kein local!
 8 show();                     # -> 100

 9 sub plus_eins { $_++ }
10 plus_eins();
11 show();                     # -> 101

use strict/warnings wirken auf Scope

Was macht eigentlich 'use'?

Fettnäpfchen Kontext

im Zweifelsfalle Klammern setzen

Spezielle Variablen

Namenskonflikte mit builtins

0, "0", TRUE, FALSE,... - I

0, "0", TRUE, FALSE,... - II

next außerhalb von Loops

|| statt //

AutoLoader vs. chroot

Regex/Unicode vs. chroot

Regex - Fettnäpfchen

Probleme mit Regex, Beispiel 1

Probleme mit Regex, Beispiel 2

Regex - was sind /m, /s ?

Regex - was macht /o ?

Regex - was macht /g ?

Regex - was macht \s

Regex - Performance

Regex übersichtlicher schreiben

Gefährlicher Code

Ist der Input wie erwartet ?

Wie schreibt man wartbaren Code

strict und warnings verwenden

Standardmodule verwenden

Hashkeys schützen

Hashkeys schützen - fields

Hashkeys schützen - Hash::Util

tief verschachtelte Hashzugriffe auflösen

Performance I

Performance II

Schon gewusst?

Kann man über mehrere Ebenen exportieren?

Crossreferenzen

Literatur

Dankeschön!

Fragen?