It's really unclear what you want to accomplish. It sounds like you want to subclass the root of an inheritance three and auto-generate the rest of the inheritance accordingly -- but then you're in a multiple inheritance situation, right? Do you mean @MyThingy::Handle::ISA = qw( MyThingy Thingy::Handle )?
I suppose this could be done just with @ISA munging, though it's ugly:
[Original code deleted; see update below]
Update for japhy's update: Ah! Makes much more sense. How about something along these lines:
sub get_cog { my ($self) = @_; my $class = ref $self; if ( $class eq "Thingy" ) { return Thingy::Cog->new; } else { my $cog_class = "$class\::Cog"; (my $cog_class_file = $cog_class . "pm") =~ s{::}{/}; if ( grep { -e $_ } map { $_/$cog_class_file } @INC ) { require $cog_class_file; return $cog_class->new; } else { return Thingy::Cog->new; } } }
-xdg
Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.
In reply to Re: Inheritence in a Suite of Modules
by xdg
in thread Inheritance in a Suite of Modules
by japhy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |