Re: Zähler zählt nicht :-(
am 30.05.2007 17:31:58 von Frank SeitzFerry Bolhar wrote:
> Frank Glück:
>>
>>Nun ja, wenn ich statt $a $xyz verwende, dann gibt das Skript ebenfalls
>>entsprechend viele Nullen aus. Allerdings vergas ich zu erwähnen, dass der
>>Zähler durchaus zählt, wenn ich $a zuvor nicht deklariere.
>
> Aha! Das bestätigt meine Vermutung.
>
> Deklarierst du die Variable nicht (bzw. nicht als lexikalisch, mit
> "my"), dann wird eine _globale_ Variable verwendet, die von
> überall angesprochen werden kann. Deklarierst du sie hingegen
> mit "my", wird eine _lexikalische_ Variable eingerichtet, die nur
> innerhalb des Scopes (Blocks), in dem du sie deklariert hast,
> ansprechbar ist. Wenn du also
>
> sub grosse_funktion {
> my $a = 0;
> for (@test) { # Hier nimmt Perl implizit "foreach" an
> print $a;
> $a++;
> }
> }
>
> schreibst, dann kannst du $a auch nur innerhalb von grosse_
> funktion() ansprechen. Außerhalb davon ist deine Deklaration
> nicht mehr gültig und daher wird ein anderes - das globale $a -
> angesprochen, und das hat, da ihm noch nichts anderes zuge-
> wiesen wurde, immer den Wert 0 (daher die Ausgabe 0).
> Anders gesagt: dein lexikalisches $a zählt brav weiter, nur
> ausgegeben wird das völlig unbeteiligte globale $a.
Das wäre dann wohl sowas (ansich zu gruselig,
um wahr zu sein):
our $a = 0;
sub f1
{
my $a = 0;
for (1 .. 10)
{
f2();
$a++;
}
}
sub f2
{
print $a;
}
f1();
xpost und fup2 dclpm
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel