> 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;
  }
  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