Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

CHECK and INIT under mod_perl

by Ovid (Cardinal)
on Dec 12, 2004 at 16:34 UTC ( #414238=perlquestion: print w/ replies, xml ) Need Help??
Ovid has asked for the wisdom of the Perl Monks concerning the following question:

Currently I've discovered that Sub::Signatures does not run efficiently unless I postpone some work to a CHECK or INIT block. I'm trying to work around this but in the meantime, since CHECK and INIT do not function properly under mod_perl, I'm wondering if there is a standard workaround that's fairly transparent to the end user? I'd rather not force them to explicitly call a setup method. Since the code uses a filter, I suppose I could explicitly set up the setup call for them, but that seems rather ugly.

Cheers,
Ovid

New address of my CGI Course.

Comment on CHECK and INIT under mod_perl
Re: CHECK and INIT under mod_perl
by stvn (Monsignor) on Dec 12, 2004 at 17:03 UTC
    I'm wondering if there is a standard workaround that's fairly transparent to the end user? I'd rather not force them to explicitly call a setup method.

    I have tried to do this same thing with Class::Trait and never managed to get it to work. And recently dragonchild and I did the same thing with Class::LazyLoad. I also think liz had a similiar issue with one of her thread modules as well. The general solution seems to be to force the use to explictly call the set up under mod_perl. To be honest, this is ugly, but has never been a big problem since it can just go in the startup.pl which I load at server startup anyway.

    Since the code uses a filter, I suppose I could explicitly set up the setup call for them, but that seems rather ugly.

    I don't think that seems ugly at all. It is doing what the user would expect it to do, which is what it would do under non-mod_perl circumstances. As far as I am concerned that is an elegant solution since it prevents the user from having to deal with your internals or be concerned about silly internal issues under mod_perl. It might look ugly in the code, but I don't think the perl parser will be offended :)

    -stvn
Re: CHECK and INIT under mod_perl
by perrin (Chancellor) on Dec 12, 2004 at 17:18 UTC
    It's pretty unusual to actually need a CHECK or INIT, so this doesn't come up a lot on the mod_perl list, but I would guess that you could replace it with a sub called during a phase like PerlChildInitHandler. You can make your BEGIN block register this handler automatically if $ENV{'MOD_PERL'} is true.
      So, if I understand you correctly, you recommend the following:
      package Floober; sub do_at_init { # Does something nifty } INIT { do_at_init(); } BEGIN { if ( $ENV{ 'MOD_PERL' } ) { ##### # What do I put here? ##### } } 1;
        Depending on when you need it to run, you could do something like this:
        Apache->push_handlers("PerlInitHandler", \&do_at_init);

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://414238]
Approved by wfsp
Front-paged by astaines
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (6)
As of 2014-08-23 07:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (172 votes), past polls