use strict; use Data::Dumper; package MyClass; sub new { my ($class, $foo) = @_; print __PACKAGE__ . "->new called with $class, $foo\n"; $class = ref($class) || $class; print "\$class is now $class\n\n"; my $self = {foo => $foo}; return bless $self, $class; } package main; my $obj1 = MyClass->new('fooval1'); my $obj2 = $obj1->new('fooval2'); print Dumper($obj1, $obj2); __END__ Outputs: MyClass->new called with MyClass, fooval1 $class is now MyClass MyClass->new called with MyClass=HASH(0x15d54bc), fooval2 $class is now MyClass $VAR1 = bless( { 'foo' => 'fooval1' }, 'MyClass' ); $VAR2 = bless( { 'foo' => 'fooval2' }, 'MyClass' );