use strict; use warnings; my $ob1 = foo->new('alpha'); my $ob2 = foo->new('beta'); $ob1->write; $ob2->write; package foo; sub new{ my $class = shift; my $subclass = shift; return bless {}, $subclass; } package alpha; sub read{ return "Alpha\n"; } sub write{ my $self = shift; print $self->read; } package beta; sub read{ return "Beta\n"; } sub write{ my $self = shift; print $self->read; }