http://www.perlmonks.org?node_id=1039983
DaisyLou has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks!

I have a script (several actually) that is run through Mod_Perl/Apache Registry and there seems to be variable sharing/leaking going on.

Without further ado here's the essence of the script...

========================= shebang, initialization ... "do" etc. &main() sub main { my $cgi = CGI->new(); my %params = $cgi->Vars(); # Get the MAC address from the URL. my $id = $params{id}; my $sqlStmt; my $hStmt; my $hDb = AnotherModule::connectDb(); $sqlStmt = "SELECT several rows"; $hStmt = MyModule::execSql($hDb, $sqlStmt); my ($value1, $value2, $value3); my $list = ""; while ($value1, $value2, $value3) = $hStmt->fetchrow) { $list .= "$value1,$value2,$value3;"; } print "$list"; OtherModule::log($blah, $blah, "$list"); $hStmt->finish; $hDb->disconnect; exit(0); }

I know that the first comment will be about the SQL stuff not being done the official way -- and you're be right, but there doesn't appear to be an issue with that.

The issue is that $list is sometimes correct, and other times has values appended to it that are from "another thread". Using DBI persistent connections.

It appears as though this may be the issue: http://perl.apache.org/docs/general/perl_reference/perl_reference.html#my____Scoped_Variable_in_Nested_Subroutines

I've read it, but don't understand it. I've tried changing "my" to "our local", no luck.

Any recommendations on how to solve this quickly and easily are really appreciated!