perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier>
Subject Re: apache2 or mod_perl2 oddball error
Date Tue, 21 Jun 2011 16:05:42 GMT
William Bulley wrote:

> Perhaps the reason that syntax is used may have come from this POD:
>    <>
Right, but what that page is showing, is the syntax of the perl "use some::module;" 
directive, as used /inside of a perl program/.
Here we are talking about the "PerlModule" directive, as used in a httpd.conf file (or 
another file included in it).

Although the effect of each of these instructions is quite similar, the allowable syntax 
in each case may be different.

Referring again to the page

One sees there an example of a PerlModule directive with several parameters after the 
"PerlModule" directive itself.  But these additional parameters are, all and each of them,

names of perl modules (aka "libraries") to be loaded.  They are /not/ additional 
parameters to the first named module.
Damn, this is probably obscure for a non-perl practitioner.  Let me try again :

in a line like
use Apache2::Const -compile => ':common';
(which you would use in a perl script, not in an Apache configuration file)
- the "use Apache2::Const" part means : load the module "Apache2::Const"
- and the "-compile => ':common'" part means : /in addition/ to loading the Apache2::Const

module itself, also "prepare" a set of symbols from that module, so as to make them easier

to use in the program which executes the "use" directive. (*)

On the other hand, in an Apache configuration file, you cannot use the "use" directive, 
you must use the "PerlModule" directive.  But this PerlModule directive has no valid 
syntax to allow the second part ("-compile => ':common'").

Ok so far ?

So how would you find a way to tell Apache and mod_perl to load the Apache2::Const module,

but /also/ do the "-compile => ':common'" part ?

Fortunately, in Perl there is always more than one way to do it.
That's where the already-named "" script comes into play, along with the 
"PerlRequire" directive.

By using the Apache/mod_perl configuration directive
PerlRequire "/path/to/some/"
you tell Apache and mod_perl to also compile and run the named script, /during the Apache

configuration phase/.  And in this script, you can use the line :
use Apache2::Const -compile => ':common';
(because in a Perl script the "use" directive /can/ be used, with the additional 
parameters and all).

(Note: the name of this script is often "", but that is only a convention, and 
you can use any script name you like, as long as the PerlRequire directive points to it).
(Note also that it does not matter that the rest of the application never references this

script; it is executed /once/ during the configuration phase of Apache, and just sets 
things up for the rest of the life of this Apache/mod_perl server).

In other words, to summarise (and this is only a repeat of what someone else wrote 
earlier), do as follows :

- create a simple perl script, for example as "/etc/apache2/", as Fred

Moyer told you how to in a reply dated 17/06 22:22.
- remove the corresponding PerlModule line from the Apache configuration file (or comment

it out)
- add the above "PerlRequire" line to your Apache configuration

The fundamental effect should be the same, but the perl language "use" directive allows 
for additional parameters such as "-compile", while this is less than certain for the 
Apache/mod_perl "PerlModule" configuration directive.

(*) for example, it means that in all other perl programs, modules, scripts running under

your Apache/mod_perl, you can now use :

return OK;

instead of the longer

return Apache2::Const::OK;

View raw message