package Duck::Secret; use Class::InsideOut qw( private id register ); private secret => my %SECRET; sub new { my $self = register( bless \(my $s), shift ); $SECRET{ id $self } = int( rand(100) ); return $self; } sub guess_secret { my ($self, $guess) = @_; return $guess == $SECRET{ id $self }; } #### # continuing previous code example sub secret { my $self = shift; die "Secret is a protected field" if ! caller(0)->isa( __PACKAGE__ ); $SECRET{ id $self } = shift if @_; return $SECRET{ id $self }; }