use Class::InsideOut qw( register public ); public name => my %name; sub new { register( shift ) } #### use Class::InsideOut qw( register public ); #### public name => my %name; readonly ssn => my %ssn; private age => my %age; $name{ refaddr $self } = "James"; $ssn { id $self } = 123456789; $age { id $self } = 32;