Even though the dispatch-ness sounds pretty cool, my goal is to have the base module have all the subs.

Understood. The advantage of using method dispatch over stash mangling is that you can have multiple instances which don't conflict.

package Foo; sub shared { print "Shared method" } sub foozle { print "Foo's foozle" } package Bar; sub foozle { print "Bar's foozle" } package Blip; sub foozle { print "Blip's foozle" } package FooBar; @ISA = qw( Bar Foo ); package FooBlip; @ISA = qw( Blip Foo );

With that kind of setup, you can choose which set of plugins you want to have active, and can have one part of your code use one plugin while another part does not.

package main; $package = 'Foo'; $package->shared(); $package->foozle(); # Calls Foo's foozle $package = 'FooBar'; $package->shared(); $package->foozle(); # Calls Bar's foozle

This approach also lets you dynamically stack your "plugins" so that a method in one of them can call NEXT and get the results of the next method up the chain; see my earlier article for details of this technique.


In reply to Re^3: Altering Package Subs and Running In To Problems by simonm
in thread Altering Package Subs and Running In To Problems by Bovine

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.