Calocybe: local und my

Beitrag lesen

Hi!

  1. local macht Variablen für alle außerhalb des Blockes unsichtbar. Für Routinen. die innerhalb des Blockes aufgerufen werden, sind sie jedoch sicht- und erreichbar.
  2. my macht Variablen für _alle_ anderen Blöcke unsichtbar.

Yepp, um das nochmal zu verdeutlichen, hier ein Code-Auszug aus Eike Grotes Perl Guide (die URL ist leider tot, vor ein paar Tagen ging sie noch):

$gl = 1;
$loc = 2;
$my = 3;

print "main: $gl = $gl   $loc = $loc   $my = $my\n";
sub1();
print "main: $gl = $gl   $loc = $loc   $my = $my\n";

sub sub1 {
   local $loc = 7;
   my $my = 8;

print "sub1: $gl = $gl   $loc = $loc   $my = $my\n";
   sub2();
}

sub sub2 {
   print "sub2: $gl = $gl   $loc = $loc   $my = $my\n";
}

Der Output:
main: $gl = 1   $loc = 2   $my = 3
sub1: $gl = 1   $loc = 7   $my = 8
sub2: $gl = 1   $loc = 7   $my = 3
main: $gl = 1   $loc = 2   $my = 3

Allerdings weiss ich jetzt immer noch nicht, was bei local intern so ablaeuft. In perlsub steht irgendwas von Manipulation der Symboltabelle, verstanden habe ich das aber nicht. So kann ich mir also immer noch nicht erklaeren, warum man local nun braucht, um ein funktionslokales Filehandle anzulegen (local *FH) und my dafuer nicht nehmen kann. Vielleicht kann ja mal noch jemand ein ausfuehrliche Erklaerung beisteuern.

Calocybe