Apache2::compat (3)
Leading comments
Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) Standard preamble: ========================================================================
NAME
Apache2::compat -- 1.0 backward compatibility functions deprecated in 2.0Synopsis
# either add at the very beginning of startup.pl use Apache2::compat; # or httpd.conf PerlModule Apache2::compat # override and restore compat functions colliding with mp2 API Apache2::compat::override_mp2_api('Apache2::Connection::local_addr'); my ($local_port, $local_addr) = sockaddr_in($c->local_addr); Apache2::compat::restore_mp2_api('Apache2::Connection::local_addr');
Description
"Apache2::compat" provides mod_perl 1.0 compatibility layer and can be used to smooth the transition process to mod_perl 2.0.It includes functions that have changed their
However, remember, that it's implemented in pure Perl and not C, therefore its functionality is not optimized and it's the best to try to port your code not to use deprecated functions and stop using the compatibility layer.
Compatibility Functions Colliding with mod_perl 2.0 API
Most of the functions provided by Apache2::compat don't interfere with mod_perl 2.0
require Socket; my $sockaddr_in = $c->local_addr; my ($local_port, $local_addr) = Socket::sockaddr_in($sockaddr_in);
should be adjusted to be:
require Apache2::Connection; require APR::SockAddr; my $sockaddr = $c->local_addr; my ($local_port, $local_addr) = ($sockaddr->port, $sockaddr->ip_get);
to work under mod_perl 2.0.
As you can see in mod_perl 1.0
my ($local_port, $local_addr) = Socket::sockaddr_in($c->local_addr);
and you aren't ready to port it to to use the mp2
my ($local_port, $local_addr) = ($c->local_addr->port, $c->local_addr->ip_get);
you could do the following:
Apache2::compat::override_mp2_api('Apache2::Connection::local_addr'); my ($local_port, $local_addr) = Socket::sockaddr_in($c->local_addr); Apache2::compat::restore_mp2_api('Apache2::Connection::local_addr');
Notice that you need to restore the
Both "override_mp2_api()" and "restore_mp2_api()" accept a list of functions to operate on.
Available Overridable Functions
At the moment the following colliding functions are available for overriding:- Apache2::RequestRec::notes
- Apache2::RequestRec::filename
- Apache2::RequestRec::finfo
- Apache2::Connection::local_addr
- Apache2::Connection::remote_addr
- Apache2::Util::ht_time
- Apache2::Module::top_module
- Apache2::Module::get_config
- APR::URI::unparse
Use in CPAN Modules
The short answer: Do not use "Apache2::compat" inThe long answer:
"Apache2::compat" is useful during the mod_perl 1.0 code porting. Though remember that it's implemented in pure Perl. In certain cases it overrides mod_perl 2.0 methods, because their
Some users may choose to keep using "Apache2::compat" in production and it may perform just fine. Other users will choose not to use that module, by porting their code to use mod_perl 2.0
If you port your
Users that are stuck with
$INC{'Apache2/compat.pm'} = __FILE__;
at the very beginning of their startup.pl. But this will most certainly break the module that needed this module.
API
You should be reading the mod_perl 1.0Another important document to read is: Migrating from mod_perl 1.0 to mod_perl 2.0 which covers all mod_perl 1.0 constants, functions and methods that have changed in mod_perl 2.0.