Inheritance is one way to go, but it should only be used when there is a clear inheritance relationship between the objects being modeled. A more common solution would be to just put the shared code in a separate utility class and have the other classes use that. | [reply] |
package Foo;
use UtilityClass;
sub some_method {
my $self = shift;
$self->UtilityClass::some_method(@_);
}
Nothing wrong with that, is there? Well... yes, because stuff is hardcoded, you may find that, when you come to subclass foo, things will break. A better approach is:
package Foo;
use UtilityClass;
sub helper_class { 'UtilityClass' };
sub some_method {
goto &{ $_[0]->helper_class->can('some_method') };
}
You could go further and add per object customization, by turning 'helper_class' into an instance method, allowing you to choose which utility class to use on an object by object basis rather than class by class...
| [reply] [d/l] [select] |
package Foo;
use UtilityClass;
sub bubbles {
...class-specific stuff...
UtilityClass->buttercup();
...class-specific stuff...
}
| [reply] [d/l] |