use strict; package TestSuite; sub new { my ($this, $motto) = @_; bless { info => $motto }, $this; } sub make_a_blob { my ($self) = @_; $self->{blob} = Blob->new; return $self; } sub print_blob { my ($self) = @_; $self->{blob}->print_stuff(); } package Blob; use PadWalker qw(peek_my); sub new { bless {}, shift; } sub print_stuff { my $callerObject = ${peek_my(1)->{'$self'}}; print $callerObject->{info}."\n"; } package main; my $ts = new TestSuite("The holy grail!"); my $ts2 = new TestSuite("A rotten apple!"); $ts->make_a_blob(); $ts->print_blob(); $ts2->make_a_blob->print_blob; __DATA__ The holy grail! A rotten apple!