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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |