in reply to Class attribute handling

I once implemented a similar hierarchy, but all the derived classes used the same %RootClass::attr_data. As I needed some statistics over existing objects in each class, I used ref of each object as the top level key in the hash, it also simplified inspecting the hash for human readers as the key indicated what data to expect in the deeper structure. Something like
#!/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;

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]