angel flower wrote:
> With mod_perl, each subroutine in every Apache::Registry script is 
> nested inside the handler subroutine.

That's true, but it didn't contribute to your problem.  What Stas was
referring to in that writeup was a sub that is already nested before you
run it under Apache::Registry, like this:

sub print_power_of_2 {
    my $x = shift;

    sub power_of_2 {
        return $x ** 2;
    }

    my $result = power_of_2();
    print "$x^2 = $result\n";
}

The "power_of_2" sub here is nested, and running it inside Registry
makes it doubly nested.  That's not the problem you had though.

> So increment_counter() is a nested 
> subroutine of handler().When I declare vars with 'my' outside of nested 
> subroutine,the problem happened.That's the reasons.

No, the same thing would happen in a normal perl program with no nested
subroutine.  Making a sub that refers to a lexical variable declared
outside of its scope will ALWAYS create a closure.  You just don't
normally notice this when running under CGI because your program exits
after a single run and you never see the persistent value of the lexical
variable.

- Perrin

Reply via email to