From: "Dr.Ruud" <[EMAIL PROTECTED]>
> "Jenda Krynicky" schreef:
> > {
> > my $static;
> > sub foo {
> > $static++;
> > ...
> > }
> > }
>
> There (the first declared version of) the variable $static is part of
> the environment of foo(). Don't mistake that for staticness.
Maybe I don't know what does "staticness" mean then. I though a
static variable is one that is private to a function, but keeps the
value between the function's invocations. How do you define
staticness?
> In Perl 5.8.8 you can enforce $static to be static, like this:
>
> {
> 0 and my $static;
> sub foo {
> $static++;
> ...
> }
> }
>
> That ugly my() can only occur once, ut it still makes the variable
> lexical.
> There is just no better way to set up a real static variable in Perl
> 5.8.8.
>
>
> Check out the differences between the following two "academic" examples:
>
> $ perl -le'
> for (7..9)
> {
> my $static = $_; # declared and initialised 3 times
>
> sub foo {
> $static++; # uses the first of the declared $static's
> print " foo:$static";
> }
> foo() for 0..1;
> print "for:$static";
> }
> '
With -w you get a "Variable $static will not stay shared" warning.
And rightly so. You are doing something you are not supposed to do.
A named subroutine inside another subroutine or a loop is a red flag.
Something that (unless found in an obfuscation) suggests that the
author of the code misunderstood something. It's yet another "please
don't do this".
$ perl -le'
for (7..9)
{
my $static = $_; # declared and initialised 3 times
my $foo = sub {
$static++; # uses the first of the declared $static's
print " foo:$static";
};
$foo->() for 0..1;
print "for:$static";
}
'
Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/