Thread Unterschiedliches Verhalten lokal/Internet: Im Internet wie erwartet, auf lokalem ko (16 answers)
Opened by Barnabas at 2007-06-04 16:52

Strat
 2007-06-06 13:28
#29049 #29049
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
genau; mit der Verwendung von globalen Variablen holst du dir mehr oder weniger verdeckte Schnittstelle zu Subroutinen ins Haus, die die Analyse und Wartung von Code erschweren, gerade wenn ein Programm etwas groesser wird.

Besser lokale Variablen verwenden und alles als Parameter uebergeben, dann ist jede Subroutine eine BlackBox mit klaren Schnittstellen (Parameter, Rueckgabeparameter) und von aussen unabhaengig. Wenn du da drinnen was aenderst, braucht du nicht bei jeder Variable das ganze Programm ueberpruefen, ob die schon wo verwendet wird und ob du sie verwenden kannst, ohne eine andere Funktionalitaet zu behindern.
Und die lokalen Variablen immer im kleinstmoeglichen Block definieren, also nicht
Code: (dl )
1
2
my $var = 'xayz';
while( $var = <$FH> ) {

sondern
Code: (dl )
while( my $var = <$FH> ) {

usw.

Wenn man globale Variablen z.B. fuer Caching zu brauchen scheint, kann man fast immer zumindest Closures verwenden:
Code: (dl )
1
2
3
4
5
6
{ # closure-block
my $counter = 0;
sub IncreaseCounter {
return ++$counter;
}
} # closure-block


oder noch besser, mit Referenzen oder gar Objekten arbeiten
Code: (dl )
1
2
my $counter = MyCounter->new( 0 );
print $counter->increase;
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Unterschiedliches Verhalten lokal/Internet: Im Internet wie erwartet, auf lokalem ko