natelewis has asked for the wisdom of the Perl Monks concerning the following question:
At any point I want to be able to write another EXTENDMETHOD and have it alter just "work". Because of my environment requirements I can't use MOOSE, but everything is OOP. Having everything just magically slide together would be ideal, am I missing a base class in between or something - or something else? The ideal scenerio being:#!/usr/bin/perl package TOP::TEST; sub new { my $class = shift; my $self = {@_}; $self->{'thing'}->{'var_1'} = 'this changed'; $self->{'thing'}->{'var_3'} = 'other thing'; bless $self, $class; return $self; } package TOP::TEST::EXTENDONE; sub new { my $class = shift; my $self = {@_}; $self->{'thing'}->{'var_1'} = 'this changed'; $self->{'thing'}->{'var_3'} = 'other thing'; bless $self, $class; return $self; } sub print_one { my ($self) = @_; return 'FROM ONE: '.$self->{'thing'}->{'var_1'}; } package TOP::TEST::EXTENDTWO; sub new { my $class = shift; my $self = {@_}; $self->{'thing'}->{'var_3'} = 'other thing changed'; bless $self, $class; return $self; } package main; #### For this example added them to this file #use TOP::TEST; #use TOP::TEST::EXTENDONE; #use TOP::TEST::EXTENDTWO; # at any point there might be an EXTENDTHREE, or EXTENDFOUR when neede +d # # this how it works now. But feels wrong for some reason my $thing = new TOP::TEST( var_1 => 'this', var_2 => 'that'); my $one = new TOP::TEST::EXTENDONE( thing=> $thing,something=> 'extra' + ); my $two = new TOP::TEST::EXTENDTWO( thing=> $thing ); # this would be ideal with automatic inheritence in the packages... bu +t # can seem to get it done correctly. # Need some wisdom :( #my $thing = new TOP::TEST( var_1 => 'this', var_2 => 'that', somethin +g=>'extra'); print 'var_1 changed: '.$thing->{'var_1'}."\n"; print 'var_2: '.$thing->{'var_2'}."\n"; print 'var_3: '.$thing->{'var_3'}."\n"; print 'var_1 from $one: '.$one->print_one()."\n";
Instead of daisy chaining them together passing the base class as a parameter of the new() for each extended class. Cheers to a wise helping hand!use TOP::TEST; use TOP::TEST::EXTENDONE; use TOP::TEST::EXTENDTWO; my $thing = new TOP::TEST( var_1 => 'this', var_2 => 'that', something +=>'extra'); # This is imported into the base class from EXTENDONE print $thing->print_one()."\n"; print $thing->{'var_3'}."\n";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Inheritance automation help
by GrandFather (Saint) on Apr 05, 2012 at 01:17 UTC | |
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 | |
|
Re: Inheritance automation help
by natelewis (Novice) on Apr 05, 2012 at 15:42 UTC | |
by GrandFather (Saint) on Apr 05, 2012 at 21:16 UTC | |
by natelewis (Novice) on Apr 17, 2012 at 19:14 UTC | |
by chromatic (Archbishop) on Apr 17, 2012 at 20:40 UTC | |
by natelewis (Novice) on Apr 11, 2012 at 22:41 UTC |