Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

How do I subclass DB?

by larryk (Friar)
on May 10, 2005 at 11:16 UTC ( #455517=perlquestion: print w/replies, xml ) Need Help??
larryk has asked for the wisdom of the Perl Monks concerning the following question:

Maybe I'm just having an attack of premature senile dementia, but looking at the DB module documentation it looks like subclassing should be easy - something along the lines of:
package Devel::larryk; use base qw(DB); use strict; Devel::larryk->new()->register(); # create instance and register sub new { bless {} } sub init { my $self = shift; $self->ready(); print "larryk initialised\n"; } 1;
This should then be invokable from the command line, as:
perl -d:larryk
...but it doesn't work. Why?

Because as soon as I use the DB module (in order to subclass it) it immediately calls ->init() on all registered clients. But of course I haven't registered as a client yet because I only just used it. So I seem to have a chicken and egg situation.

How can this work?

perl -le "s,,reverse killer,e,y,rifle,lycra,,print"

Replies are listed 'Best First'.
Re: How do I subclass DB?
by thcsoft (Monk) on May 10, 2005 at 11:32 UTC
    because you should either type:
    perl -MDevel::larryk -e' ...'
    perl -e 'use Devel::larryk; ...'

    language is a virus from outer space.
      perldoc perlrun
               runs the program under the control of a debugging, profiling, or
               tracing module installed as Devel::foo. E.g., -d:DProf executes the
               program using the Devel::DProf profiler. As with the -M flag,
               options may be passed to the Devel::foo package where they will be
               received and interpreted by the Devel::foo::import routine. The
               comma-separated list of options must follow a "=" character. See
      Thanks, but that's not actually the problem. The Devel:: is assumed with the -d switch.

      My problem is that the DB module does something as soon as it is included to organise registered debugging "clients". Unfortunately, this does not give me any time to actually register, as I have to include the code before I can subclass it (or at any rate, the register function must be defined so I can call it _to_ register).

      I don't really fancy what seems to be the answer which is to doubly declare the DB package so I can step through the use of itself in order to call register() before it inits the registered clients *ugh*.

      Thanks for your suggestion, though.

      perl -le "s,,reverse killer,e,y,rifle,lycra,,print"

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://455517]
Approved by tlm
Front-paged by diotalevi
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (8)
As of 2017-01-22 13:44 GMT
Find Nodes?
    Voting Booth?
    Do you watch meteor showers?

    Results (187 votes). Check out past polls.