in reply to Inheritance automation help
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Inheritance automation help
by natelewis (Novice) on Apr 05, 2012 at 04:35 UTC | |
by GrandFather (Saint) on Apr 05, 2012 at 04:59 UTC | |
by tangent (Parson) on Apr 05, 2012 at 09:10 UTC |