baseportal | |||
English - Deutsch | "Es gibt keine dummen Fragen - jeder hat einmal angefangen" | ||
|
Ausgewählter Eintrag: | Zur Liste |
<perl> ###### Punkt 1 $__global = 555; ###### Punkt 2 sub outLocal { out "$__local<br>"; ####### Punkt 8 } sub test { ###### Punkt 4 my $__my = 8; ########### Punkt 5 local $__local = 999; ###### Punkt 6 ###### Punkt 7 outLocal; ###### Punkt 9 } ###### Punkt 3 test; ###### Punkt 10 </perl>
__my gibt's nur INNERHALB des aktuellen BLOCKS, nämlich sub test { } Punkt 5: hier wird nun aus dem NAMEN __my der SCALAR $__my, der nur innerhalb von sub test { } existiert! Punkt 6: hier wird nun aus dem NAMEN __local der locale SCALAR $__local, wobei der ursprüngliche Wert von __local, nämlich undef, zwischengespeichert wird, bis dieser BLOCK beendet wird. Punkt 7: nun gibt's die SCALARE $__global, $__local und $__my Punkt 8: hier gibts wieder nur die SCALARE $__global und $__local. ACHTUNG: hier gibts KEIN __my und KEIN $__my $__local ist mit den Werten der aufrufenden Stelle (also 999) belegt Punkt 9: An dieser Stelle (Ende des BLOCKS sub test { } ) wird der SCALAR $__local zurückgesetzt und es wird wieder undef zugewiesen, wodurch nur mehr der NAME __local übrigbleibt. $__my und __my werden vollständig eliminiert. Punkt 10: jetzt gibts nur mehr den SCALAR $__global und den NAMEN __local
my ist innerhalb eines BLOCKS physikalisch vorhanden. my-Variablen betreffen nur örtlich begrenzt den Programmcode, sind also statisch. local ist logisch innerhalb des BLOCKS. So lange das Programm sich während der Verarbeitung (also zur Laufzeit) innerhalb dieses Blocks befindet (wenn es in andere Unterroutinen springt nimmt es die localen Variablen mit) existieren diese Variablen (!). Sie sind dynamisch.
|
Alle Einträge zum Thema: | Zur Liste |
if ($use) {my $db_name = substr($use,2); if ($act eq "n") {put undef ,"$db_name"; $a_actiontext = "Datensatz hizugefügt..." }elsif $act eq "c" ´&& $dsnr) {mod "Id==!$dsnr", "$db_name"; $a_actiontext = "Datensatz geändert..." }elsif ($act eq "d" && $dsnr) {del "Id==!$dsnr", "$db_name";} $a_actiontext = "Datensatz gelöscht..." } ..anderes zeugs... Nun ist $db_name natürlich für die Aktionen nicht sichtbar, mit local-Initialisierung aber schon. Nur schreibt das Perl-Kochbuch, daß da $db_name nur neu belegt wird, aber trotzdem global definiert ist (oder hab ich das falsch begriffen - s. auch Perl-Kochbuch Rezept 10.13, S. 371)
<perl> ###### Punkt 1 $__global = 555; ###### Punkt 2 sub outLocal { out "$__local<br>"; ####### Punkt 8 } sub test { ###### Punkt 4 my $__my = 8; ########### Punkt 5 local $__local = 999; ###### Punkt 6 ###### Punkt 7 outLocal; ###### Punkt 9 } ###### Punkt 3 test; ###### Punkt 10 </perl>
__my gibt's nur INNERHALB des aktuellen BLOCKS, nämlich sub test { } Punkt 5: hier wird nun aus dem NAMEN __my der SCALAR $__my, der nur innerhalb von sub test { } existiert! Punkt 6: hier wird nun aus dem NAMEN __local der locale SCALAR $__local, wobei der ursprüngliche Wert von __local, nämlich undef, zwischengespeichert wird, bis dieser BLOCK beendet wird. Punkt 7: nun gibt's die SCALARE $__global, $__local und $__my Punkt 8: hier gibts wieder nur die SCALARE $__global und $__local. ACHTUNG: hier gibts KEIN __my und KEIN $__my $__local ist mit den Werten der aufrufenden Stelle (also 999) belegt Punkt 9: An dieser Stelle (Ende des BLOCKS sub test { } ) wird der SCALAR $__local zurückgesetzt und es wird wieder undef zugewiesen, wodurch nur mehr der NAME __local übrigbleibt. $__my und __my werden vollständig eliminiert. Punkt 10: jetzt gibts nur mehr den SCALAR $__global und den NAMEN __local
my ist innerhalb eines BLOCKS physikalisch vorhanden. my-Variablen betreffen nur örtlich begrenzt den Programmcode, sind also statisch. local ist logisch innerhalb des BLOCKS. So lange das Programm sich während der Verarbeitung (also zur Laufzeit) innerhalb dieses Blocks befindet (wenn es in andere Unterroutinen springt nimmt es die localen Variablen mit) existieren diese Variablen (!). Sie sind dynamisch.
sub testlex { my $_1=1; foreach my $_2 (@_) { my $_3=0; #... tu was mit $_2 und $_3 } }
$_2 gilt nur innerhalb von foreach, nur hats bei jedem Durchlauf des foreach einen anderen Wert. $_3 gilt nur innerhalb des foreach und wird bei jedem Durchlauf neu definiert und INITIALISIERT!
sub testlex { my $_1=1; # zusätzlicher BLOCK! { my $_3=0; foreach my $_2 (@_) { #... tu was mit $_2 und $_3 } } }
Liste der ersten 150 Einträge: | Einklappen | Zur Eingabe |
Zur Eingabe | > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge |
© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen |