Abstract: Der Vortrag handelt von typischen Problemen und Missverständnissen bei
der
Arbeit mit Perl. Er basiert auf einem internen 3-stündigen Seminar
welches
mit großem Erfolg firmenintern gehalten wurde. Die im Vortrag
angesprochenen
Probleme basieren auf realen Bugs.
Der Vortrag würde u.a folgende Sachen umfassen:
- Variationen von 0,false und die Probleme, die das in Code bereiten
kann,
zB: "0" == 0,"0E0" == 0, aber !"0" -> true, !"0E0" -> false
Dieser Teil alleine würde sich auch gut für einen Lightening Talk
eignen
- defined vs. exists vs. length vs. boolean Kontext
- for my $i (..) -> typischer Fehler ist $i zu ändern ohne zu
berücksichtigen, das es ein Alias und keine Kopie ist
- Probleme mit Funktionsprototypen, zB.
sub foo($;$) { print "got: @_\n"; }
sub bar { foo(@_) }
bar( 'foo','bar' ) ## -> "got: 2"
- scope von 'our' bzw. 'use vars' ist File/Block, nicht package im
Gegensatz
zu 'my'. Z.B ein Problem wenn im Kombination mit @ISA und mehreren
packages je File genutzt (d.h es wird das @ISA des vorhergehenden
packages
überschrieben)
- interessante Effekte mit 'next' ausserhalb von Loops (was
typischerweise
als Ergebnis von Refactoring von Code passiert) - Perl warnt nur zur
Laufzeit wenn warnings an, nicht schon bei perl -cw
- Kontextabhängigkeiten von Funktionen und Operationen, zB
while ( my @m = m/regex/g ) # Endlosloop wenn
matcht
while ( m/regex/g ) { my @m = ($1,$2,...) ... # Korrekt
- Vorsicht mit speziellen Variablen. Bsp:
- $a,$b werden nicht von use strict umfasst
- $_ = "bla\nfasel"; m{bla$\nfasel}m; # $\ ist speziell
- Funktionsnamen, die man nicht verwenden sollte, da sie
Spezialbedeutung haben
(DESTROY,import,unimport,CHECK,...)
- Unverständnis von /m und /s und /o Operatoren bei Regex