Class-Modular
view release on metacpan or search on metacpan
lib/Class/Modular.pm view on Meta::CPAN
As this is the most common thing to do in C<_init>, if a subclass
doesn't have one, then the array C<@{"${subclass}::SUB_MODULES"}> is
used to determine the subclass that need to be loaded:
for my $module (@{"${subclass}::SUB_MODULES"}) {
$self->is_loaded($module) || $self->load($module);
}
=cut
sub load($$;$) {
my ($self,$subclass,$options) = @_;
$options ||= {};
# check to see if the subclass has already been loaded.
if (not defined $self->{$cm}{_subclasses}{$subclass}){
eval {
no strict 'refs';
# Yeah, I don't care if calling an inherited AUTOLOAD
lib/Class/Modular.pm view on Meta::CPAN
if ($cm->is_loaded('Subclass')) {
# do something
}
Tests to see if the named subclass is loaded.
Returns 1 if the subclass has been loaded, 0 otherwise.
=cut
sub is_loaded($$){
my ($self,$subclass) = @_;
# An entry will exist in the _subclasses hashref only if
return 1 if exists $self->{$cm}{_subclasses}{$subclass}
and defined $self->{$cm}{_subclasses}{$subclass};
return 0;
}
=head2 override
lib/Class/Modular.pm view on Meta::CPAN
$self->_addmethods()
Given an array of methods, adds the methods into the _methodhash
calling table.
Methods that have previously been overridden by override are _NOT_
overridden again. This may need to be adjusted in load.
=cut
sub _addmethods($@) {
my ($self,$subclass,@methods) = @_;
# stick the method into the table
# DLA: Make with the munchies!
foreach my $method (@methods) {
if (not $method =~ /^$subclass/) {
$method = $subclass.'::'.$method;
}
my ($method_name) = $method =~ /\:*([^\:]+)\s*$/;
( run in 0.728 second using v1.01-cache-2.11-cpan-65fba6d93b7 )