Thanks. Using prefork looks like a winner. After running apt-get install apache2-mpm-prefork apache2-prefork-dev
My final results look like in /etc/apache2/httpd.conf PerlModule DocRoot PerlTransHandler DocRoot in DocRoot.pm I have package DocRoot; use strict; use warnings; use Apache::RequestRec (); use Apache::RequestUtil (); use Apache::Const -compile => qw(DECLINED); sub handler { my $r = shift; my $new_docroot = hostname2docroot($r->hostname); $r->document_root($new_docroot); return Apache::DECLINED; } sub hostname2docroot { return "/var/docroots/$_[0]"; } 1; Two comments and a question. First, in my little test, I alternate between five different hosts, and don't do the cleanup handler to put the docroot back, and everything looks fine. Second, I couldn't get this $r->document_root(hostname2docroot($r->hostname)); To set the docroot. However, each of the following worked my $new_docroot = hostname2docroot($r->hostname); $r->document_root($new_docroot); And $r->document_root("" . hostname2docroot($r->hostname)); And $r->document_root($_ = hostname2docroot($r->hostname)); How very strange. My question is, why switch to apache2 if I have to use a prefork server, and seemingly can't take advantage of threading? Thanks, Earl > -----Original Message----- > From: Geoffrey Young [mailto:[EMAIL PROTECTED] > Sent: Monday, February 14, 2005 4:27 PM > To: Cahill, Earl > Cc: mod_perl > Subject: Re: $r->document_root > > > > Geoffrey Young wrote: > >> $r->document_root(hostname2docroot($r->hostname)); > > > > > > you just can't do that without setting it back at the end of a request. > see > > > > http://www.webreference.com/programming/perl/cookbook/chap4/2.html > > > > for why. > > I should add here that try doing this in a threaded environment (such as > the > worker mpm) and you're in for a world of trouble - if you need to do this > with mp2 stick with prefork until we get the mutex stuff implemented (if > ever). > > --Geoff