Thread Geltungsbereiche
(11 answers)
Opened by Kean at 2008-11-28 13:24
hmm, diese Fragen kommen immer wieder auf weil 2 verscheidene Dimensionen von Perl durcheinandergeworfen werden.
1. Deklaration und Geltungsbereiche 2. Unterschied zw. Packagevariablen und lexikalischen Variablen. Der Geltungsbereich ("scope") ist erstmal ein Codestück zwischen Deklarationsstelle und Ende des aktuellen Blocks (d.h. nächster schließenden Klammer der gleichen "Ebene"). Das aktuelle File ist der größtmögliche Geltungsbereich. Deklarationen sind my und our die zum Compilierungszeitpunkt festlegen speicherbereiche den Variablennamen im scope zugewiesen werden. (local ist keine Deklaration!) Speicherstellen sind hashähnliche interne Strukturen wo Perl seine Variableninhalte ablegt. Für Packages heißen diese stash (= Symbol Table haSH) für Blöcke (lex)pad. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # file { # code blockebene 1 # code1 ebene1 my $x; our $y; # Anfang Geltungsbereich $x,$y in Ebene 1 { # code blockebene 2 package NEU; my $x; our $y; # Anfang Geltungsbereich $x,$y in Ebene 2 print $x; # $x in Lexpad 2 print $y; # $y in Package "NEU", also $NEU::y; }# Ende Block2 und der Geltungsbereiche von $x,$y, und NEU our $z; # =$main::z; weil Geltungsbereich von package NEU verlassen. } # Ende Geltungsbereich 1 $x,$y #ende Geltungsgbereich file was passiert mit deklarierten Variablennamen im Geltungsbereich? 1. by my $x wird gehört jedes $x im Geltungsbereich zum Lexpad des umfassenden Blockes 2. by our $y gehört jedes $y im Geltungsbereich zum Package zum Deklarationszeitpunkt, hier also ist $y= $main::y. Der Befehl "package"unterliegt auch dem Blockscoping. Neue Geltungsbereiche überschreiben lokal alte. Bitte um Rückfragen bei Unklarheiten, bei Bedarf mach ich mal nen detaillierten TWiki-Artikel draus. me and my writeups
|