Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: How to sub class-es

by perlfan (Vicar)
on May 19, 2020 at 08:34 UTC ( #11116931=note: print w/replies, xml ) Need Help??

in reply to How to sub class-es

Check out Conway's Object Oriented Perl. And for God's sake I hope you never find the time to learn Moose or Moo.
package Robo; use strict; use warnings; sub new { bless { Arm => Robo::Arm->new(), # 'Arm' points to instance of Robo +::Arm Feet => Robo::Feet->new(), #'Feet' points to instance of Rob +o::Feet }, shift } 1; package main; my $robo = Robo->new(); $robo->{Feet}->walk(); $robo->{Arm}->pick( "Apple" );
If you want to have walk and pick methods attached to Robo instances, then you have to create these as subroutines in package Robo.
sub walk { my $self = shift; $self->{Feet}->walk(); return; } sub pick { my ($self, $thing) = @_; return $self->{Arm}->pick( $thing ); }
Maybe that's what you're trying to do with AUTOLOAD, but my advice is to do it manually before you start trying to fold in methods from member classes using AUTOLOAD.

Also, new X is not idiomatic and I am surprised still works in some cases. Do X->new(..) and don't look back.

Replies are listed 'Best First'.
Re^2: How to sub class-es
by JediMasterT (Sexton) on May 21, 2020 at 12:02 UTC
    ++ for the simplicity of this answer. It answers the question at hand without going too much further. I wouldn't recommend this if you're trying to abstract out the robot's specific loadout (i.e. if you want to be able to use a robot instance without having to know if it has arms) but that's not what the question asked.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11116931]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (3)
As of 2020-11-30 12:30 GMT
Find Nodes?
    Voting Booth?

    No recent polls found