Reworking your sample code somewhat should help you see the light:
#!/usr/bin/perl use strict; use warnings; package Top; sub new { my ($class, %params) = @_; my $self = bless \%params, $class; $self->{var1} = 'Top set var1'; $self->{var3} = 'Top set var3'; return $self; } sub doPrint { my ($self) = @_; print "Test: $self->{var1}\n"; } package Top::Extend1; push @Top::Extend1::ISA, 'Top'; sub doPrint { my ($self) = @_; print "Extend1 overrides doPrint: $self->{var1}\n"; } package Top::Extend2; push @Top::Extend2::ISA, 'Top'; sub new { my ($class, %params) = @_; my $self = $class->SUPER::new(%params); $self->{var1} = 'Top::Extend2 set var1'; return $self; } package main; my $test = Top->new(); my $one = Top::Extend1->new(something => 'extra'); my $two = Top::Extend2->new(); $test->doPrint(); $one->doPrint(); $two->doPrint();
Prints:
Test: Top set var1 Extend1 overrides doPrint: Top set var1 Test: Top::Extend2 set var1
The main part of the trick is using push @Current::Package::ISA, 'Base::Package'; to hook up the inheritance chain. There are other ways to do that using parent or Exporter, but for light weight OO the push is sufficient.
In reply to Re: Inheritance automation help
by GrandFather
in thread Inheritance automation help
by natelewis
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |