#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; { package My::Root; use Scalar::Util qw{ refaddr }; our %attr; sub new { my ($class, $name) = @_; my $o; $attr{$class}{ refaddr(\$o) }{name} = $name; bless \ $o, $class; } sub name { my ($self) = @_; $attr{ ref $self }{ refaddr($self) }{name} } sub count { my ($class) = @_; return scalar keys %{ $attr{$class} } } } { package My::Child; use parent -norequire => 'My::Root'; } my $o1 = 'My::Root'->new('root1'); say $o1->name; my $children = map 'My::Child'->new("child$_"), 1 .. 10; say "Number of Root instances: ", 'My::Root'->count; say "Number of Child instances: ", 'My::Child'->count;