I ran into the same problem. Found a simpler, cleaner solution.
Just perform a
export PERL_HTTP_URI_CLASS=URI::URL
before building mod_perl, and you're home free.
Long term, all mod_perl testing modules that assume URI::URL
is loaded by LWP will now need to explicitly load URI::URL if they use it.
I suggest doing so following the loading of LWP.
Here's why it happened:
Cliff noted:
I noticed everywhere that URI::URL was being used in mod_perl and embperl,
LWP::UserAgent was being used.
also, i found this is the LWP (libwww-perl-5.5395) release notes:
HTTP::Request, HTTP::Response will by default now use URI class,
instead of URI::URL, when constructing its URI objects. This
has a potential for breaking existing code as URI::URL objects had
some extra methods that external code might depend upon.
He's right, and this is exactly what's happened in mod_perl.
It's a bug *caused* by recent changes in LWP, and not a bug in LWP, per se.
From Gisle Aas' directory in CPAN, you can see:
04/10/01 06:15PM157,267 libwww-perl-5.53.tar.gz
05/05/01 08:57AM172,925 libwww-perl-5.53_94.tar.gz
08/06/01 07:46PM174,613 libwww-perl-5.53_95.tar.gz
From the official website, http://www.linpro.no/lwp, he says the
lastest version is 5.53 from 4/10/01. However, if you use the CPAN module,
you will pickup the 5.53_95 version instead. This is the version (and
maybe 5.53_94 as well, but I haven't checked) that makes mod_perl break.
Or maybe some interim versions of the CPAN module are downloading
this development version of the module, I'm not sure.
I'm willing to bet that both of you have the later 5.53_95 rev and not
the 5.53 version.
Here's the cause of the problem. Gisle has always used URI::URL for
representing his URLs within LWP. These latest revs changed that.
He now uses a base URI class. The effect of this is that LWP no longer
uses URI::URL. Meaning URI::URL is no longer 'use'd by LWP, and so
LWP will no longer automatically 'use' URI::URL and pull it in too.
This is what's making mod_perl (and any other modules that do this) break.
Using LWP *does not* load URI::URL. mod_perl's tests *assume* that just
because LWP was loaded, that URI::URL was too. And that's the hidden
dependency that's being violated here.
So, where's the root of the cause of the code breakage in LWP, you ask?
Way down in HTTP::Message (which is inherited by HTTP::Request and
HTTP::Response), Gisle has changed it to use the bare URI class and not
the older URI::URL class.
Here's the line of code that does the damage (Line 37 in HTTP::Message.pm):
$HTTP::URI_CLASS ||= $ENV{PERL_HTTP_URI_CLASS} || URI;
As should be obvious now, my simple solution is to perform a
export PERL_HTTP_URI_CLASS=URI::URL
before building mod_perl, and you're home free.
Michael King
[EMAIL PROTECTED]
-
Valuenet Web Mail.
http://www.valuenet.net/