The above replies explain why the variable's scope includes the subroutine. But the "George" issue is a more subtle problem: the infamous "won't stay shared" issue (which, by the way, you would see if you enable
warnings in your code). When running a CGI script with mod_perl using
Apache::Registry, you can't use variables declared with
my in the main script body inside subroutines, because the subroutine will have a "copy" of the variable from the first time the script is run, which is almost never what you want. Some possible solutions are:
- declare the variable with our instead of my
- use an anonymous subroutine instead of a named one
- pass the value as an argument to the subroutine rather than accessing the variable directly within it
- use Apache::PerlRun instead of Apache::Registry