Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

How do I organize a large module?

by hesco (Deacon)
on Aug 19, 2009 at 17:42 UTC ( [id://789889]=perlquestion: print w/replies, xml ) Need Help??

hesco has asked for the wisdom of the Perl Monks concerning the following question:

`perldoc Exporter` says I should not export object->methods(). If that is the case, how do I organize a large module (My::Module) into logical units (My::Module::This and My::Module::That), making all those My::Module::(This|That)->methods() accessible as My::Module->methods() so they accept my base class on the interface and that Test::More::can_ok('My::Module','methods') returns true? -- Hugh
if( $lal && $lol ) { $life++; }

Replies are listed 'Best First'.
Re: How do I organize a large module?
by tilly (Archbishop) on Aug 19, 2009 at 18:08 UTC
    It looks like you're looking for inheritance. In My::Module do:
    our @ISA = qw(My::Module::This My::Module::That);
    Without knowing the details of what you're doing, I strongly recommend that you learn about the benefits of modularity. Which does not mean labeling chunks of stuff "modules". But instead means dividing your program into pieces that do different things, then making the interfaces between those pieces be small and clear. Which means that you're then able to make large changes to individual pieces.

    I say this because writing down all of the functions that do one thing in one place, then freely using them everywhere else exports a large interface. This is bad for modularity, and is why Exporter advises you not to do that. To see just one of the practical problems that result, pity the poor maintenance programmer who wants to see how a commonly used function is implemented. The programmer knows that that function can be called in a particular package, but if that package has tons of imported functions from elsewhere, then tracking down the original function can be a real PITA.

    This same issue is why many good programmers think that inheritance is overused and it is better to use other techniques, like composition, instead.

Re: How do I organize a large module?
by ikegami (Patriarch) on Aug 19, 2009 at 17:57 UTC
    You actual request makes no sense. There's no way to know whether My::Module->method() should call My::Module::This->method(), My::Module::That->method() or My::Module::DoesNotExistYet->method().

    Either your inheritance is backwards, or you are trying to split a package across multiple files. There'sPerl has no problem doing that.

    My/Module.pm:

    package My::Module; use My::Module::some_methods; use My::Module::other_methods; ...

    My/Module/some_methods.pm:

    package My::Module; ...

    My/Module/other_methods.pm:

    package My::Module; ...

    Note that if your module is really that big, you probably have some design problems in your interface.

Re: How do I organize a large module?
by zwon (Abbot) on Aug 19, 2009 at 18:01 UTC

    If you want all methods to be accessible as they were in Your::Module, why do you want put them into over modules? Maybe you should have a look onto AutoLoader and AutoSplit.

Re: How do I organize a large module?
by Anonymous Monk on Aug 19, 2009 at 18:49 UTC

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2024-04-25 20:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found