[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