Hello, I have two scripts, call them A and B. Here's what I'm doing (paraphrased heavily to save posting a huge pile of code):
In data.html, I have: <!--#include virtual="A?action=show" --> In A, I have: $q = new CGI; show() if $q->param('action') eq 'show'; sub show { Apache::Include->virtual("B?action=remove"); } In B, I have: $q = new CGI; show() if $q->param('action') eq 'show'; remove() if $q->param('action') eq 'remove'; sub show { print "B::show()\n"; } sub remove { print "B::remove()\n"; } Inveriably, I end up with "B::show()" in my output, not at all what I wanted, expected or hoped for. What I see happening is that Apache::Registry is loading CGI.pm into the httpd child the first time it encounters a script that uses it. This runs a number of functions within CGI.pm which set up variables, etc. The call to new() in A then reads the query (GET or POST, doesn't matter) into @QUERY_PARAM. When B is invoked, within the same child, Apache::Registry DOES NOT reload CGI.pm and therefore does not initialize any of the variables, etc. This results in the new() call in B REUSING (!) the @QUERY_PARAM which was built up during the new() call in A! OOOPS! In order to make it work, I had to dig thru CGI.pm and found a function that's in there with comments about mod_perl around it, specifically: CGI::initialize_globals(); If I add this call in before both of the new() invocations, I get the desired, expected results. I'm not sure who to pin this on, mod_perl, Apache::Registry or CGI but it would seem to me that this qualifies as a bug, somewhere. Michael