I want to create generic objects if the package does not already exists. This is to keep me from creating a bunch of nearly identical modules that all do the same thing. The only thing that really changes is the package name. So I wrote this code, which I thought would work but I am not so sure.

################################################# sub _create_new_package_for { my $self = shift; my $package = _get_package_name( shift ); eval "use $package"; ## no critic return $package if not $EVAL_ERROR; my $eval_package =<<"END"; package ${package}; use strict; use warnings; use English qw( -no_match_vars ); use base 'Generic::Tree'; use base 'Generic::Container'; 1; END eval $eval_package; ## no critic croak $EVAL_ERROR if $EVAL_ERROR; return $package; }

The issue I see here is that the new 'package' does not seemed to be stored. So I can use it once, but if I want to 'use' a generic package that has already been created, it will not allow itself to be identified with a 'use' statement. So it will always eval the package code again. To me that did not seem correct. Example:

$self->_create_new_package_for( 'Testing::Package' ); $self->_create_new_package_for( 'Testing::Package' );

From the above code, I would assume, that the first time I initialize this namespace. So the second time I execute the subroutine it would be 'usable'. It is not, so what is it that I am missing and how can I fix it?


In reply to Dynamically create Packages by Herkum

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.