Custom Configuration Best Practice

"David E. Wheeler" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <[email protected]>
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
smime.p7s (application/pkcs7-signature, 4 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.