Re: RFC 188 (v1) Objects : Private keys and methods

[email protected] (Kenneth Lee) Sat, 02 Sep 2000 14:37:29 +0800
Newsgroups perl.perl6.language.objects
Message-ID <[email protected]>

Kenneth Lee wrote:
> 
> > Once a hash has been C<private>-ized, the only way to extend its set of
> > entries is via another call to C<private>:
> >
> >         sub new {
> >                 my ($class, %self) = @_;
> >                 bless private \%self, $class;
> >                 private $self{seed} = rand;     # okay
> >                 $self{seed} = rand;             # dies, can't autovivify
> >         }
> >
> 
> can we eliminate the private keyword and perform this check on all
> blessed array/hash references? direct access to entries is prohibited
> outside of the bless()ed package:
> 
>   package MyAccount;
>   @ISA = qw(BaseClass);
>   sub new {
>     my $class = shift;
>     bless $class->SUPER::new(@_), $class;

er, should be $class->SUPER::new(@_) ...

>   }
>   sub creditBalance {
>     self->{balance} += shift;  # valid
>   }
>   sub debitBalance {
>     self->{balance} -= shift;  # valid
>   }
> 
>   package main;
>   $acc = MyAccount->new;
>   $acc->{balance} *= 1000;     # dies
> 
> just IMHO,
> kenneth