Hrmmm ... run-time compilation. *grins*

My favorite answer would be to encapsulate this into some sort of Factory, pass the factory the value, and have it create the instance of the correct class.

Of course, this is just punting the answer off to some factory class. How do you do it in the factory??

if ($value eq 'A') { eval "use Blah::First"; } elsif ($value eq 'B') { eval "use Blah::Second"; } else { eval "use Blah::Default"; }
Another, more extensible, possibility would be to do something like:
my $basedir = "/some/base/dir/for/perl/Blah"; require "$basedir/$value"; # or --- eval "use Blah::$value";
Now, require doesn't do an import() the way use does. Thus, if you have an import() anywhere in your hierarchy (typically if you use Exporter), then you have to make that function call yourself, maybe like "Blah::$value"->import(). That should work, but it is untested.

I would recommend the first alternative, unless you feel really wild and free. The second is a little less secure and you have less control over it.

Update: Changed to use eval, as per merlyn's comment.

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.


In reply to Re: Inheritance and Container Classes and use/require by dragonchild
in thread Inheritance and Container Classes and use/require by TGI

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.