Re: Zähler zählt nicht :-(

Re: Zähler zählt nicht :-(

am 30.05.2007 17:31:58 von Frank Seitz

Ferry 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

Re: Zähler zählt nicht :-(

am 31.05.2007 12:19:30 von Ferry Bolhar

Frank Seitz:

> Das wäre dann wohl sowas (ansich zu gruselig,
> um wahr zu sein):

[snip]

Ganz genau, wobei man hier eben - solange man nur
$a oder $b verwendet - häßlicherweise das "our"
(und damit die Deklaration) auch weglassen kann.

Eigentlich seltsam, dass das bis jetzt nicht behoben
wurde.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Zähler zählt nicht :-(

am 31.05.2007 13:01:50 von Moritz Lenz

Hallo,

Ferry Bolhar wrote:
> Frank Seitz:
>=20
>> Das wäre dann wohl sowas (ansich zu gruselig,
>> um wahr zu sein):
>=20
> [snip]
>=20
> Ganz genau, wobei man hier eben - solange man nur
> $a oder $b verwendet - häßlicherweise das "our"
> (und damit die Deklaration) auch weglassen kann.
>=20
> Eigentlich seltsam, dass das bis jetzt nicht behoben
> wurde.

In Perl 6 wird es behoben. Da gibt es mehrere Möglichkeiten. Das eine
sind "pointy subs", also z.B.

sort ->($x, $y) {$y cmp $x}, @liste;

wobei hinter dem Pfeil -> die Argumente kommen.

Die zweite Möglichkeit sind "Twigils", also sekundäre sigils. Da gibt=
es
'^' für "self declaring formal parameters" (oder so), da würde man da=
nn

sort {$^y cmp $^x}, @liste;

schreiben, wobei dir Variablen in lexikographischer Reihenfolge befüllt=

werden, also $^x vor $^y.

Ist jetzt ein wenig Off-Topic, aber ich will den Perl-Programmierern
schon mal das Wasser im Mund zusammenlaufen lassen, damit sie sich dann
auf Perl 6 stürzen wenn es fertig wird ;-)

Grüße,
Moritz

--=20
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/