[Wellington-pm] im in ur insid0ut 0bjex mut1n ur attr1but3s
Sam Vilain
sam at vilain.net
Mon Nov 13 20:37:37 PST 2006
package Ur::Base;
use Class::InsideOut qw( public private register id );
use Carp;
public d00dz => my %d00dz;
sub new {
my $class = shift;
my $self = \( my $scalar ); # anonymous scalar
bless $self, $class;
register( shift );
$d00dz{ id $self } = "alive";
$self;
}
sub check {
my $self = shift;
return "my d00dz are $d00dz{ id $self }";
}
*d00dz = sub {
my $self = shift;
my $are = shift;
croak "ur not allowed" if $are ne "alive";
$d00dz{ id $self } = $are;
};
package Im;
$your_base = Ur::Base->new();
eval { $your_base->d00dz("dead") };
print "can't change via front door\n" if $@;
print $your_base->check,"\n";
require PadWalker;
my $pwned = PadWalker::peek_sub($your_base->can("d00dz"))->{'%d00dz'};
for ( keys %$pwned ) {
$pwned->{$_} = "dead";
}
print $your_base->check,"\n";
More information about the Wellington-pm
mailing list