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

Reply via email to