#!/usr/bin/perl -w use Data::Dumper; use strict; package Apple; sub new { my $obj = shift; my %self = ( color => 'red' ); bless \%self, $obj; } sub serve { return 'sliced'; } package Orange; sub new { my $obj = shift; my %self = ( color => 'orange' ); if ( @_ ) { $self{apple} = shift; ## other objects $self{shape} = shift; } bless \%self, $obj; } sub serve { my $self = shift; return ( $self->{apple} ) ? $self->{apple}->serve() : 'squeezed'; } package main; my $red = new Apple; my $yel = new Apple; $yel->{color} ='yellow'; ## or is it better to pass to the new() for initialization. my $foo = new Orange(); my $baz = new Orange( $red ); ## is it wise to pass an object ref vs. "use'ing" the package for my $obj ( $red, $yel, $foo, $baz ) { print 'served: ', $obj->serve, "\n"; } print "\n fruit stand: \n" , Dumper($red) , Dumper($yel) , Dumper($foo) , Dumper($baz) , "\n";