Fellow mod_perlers,

I followed the instructions in the Server Configuration Customization guide to 
create a custom Apache configuration directive like so:

    my $foo;
    sub foo { $foo = $_[2] }
    Apache2::Module::add(__PACKAGE__, [
        { name => 'MyFoo', func => __PACKAGE__ . '::foo' },
    ]);

    sub handler {
        my $r = shift;
        $r->print($foo);
        return OK;
    }

This works pretty well; I can now set the MyFoo directive in my httpd.conf. But 
it feels a little hinky to set up package globals that get set on every request 
like this. It feels like it would make more sense if they were getting passed 
to an object method, but foo() is called as a function here; the first 
parameter is the class name, not an object. Also, I tried to use an anonymous 
sub in the add call:

    my $foo;
    Apache2::Module::add(__PACKAGE__, [
        { name => 'MyFoo', func => sub { $foo = $_[2] },
    ]);

But that didn’t work either; mod_perl complained that it couldn’t find a 
function named “CODE(0x1d5e988P)” in the package. I was surprised by this since 
the docs say:


> The func attribute expects a reference to a function or a function name. 


https://perl.apache.org/docs/2.0/user/config/custom.html#C_func_

So none of this feels quite right to me. Anyone got a point to best practices 
for setting up custom configuration directives? Or is this close to what 
everyone does anyway?

Thanks,

David

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to