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.