Trouble is, we only want to override DESTROY for objects that have been fetched from or stored with Pixie
The code below reblesses the object into a new class that is based on it's existing class, establishing the necessary ISA relationships to make it work like before, yet call your DESTROY method.
package Pixie::objwrapper;
sub wrap {
my $class = shift;
my $obj = shift;
my $obj_class = ref($obj);
{
no strict;
@{"Pixie::objwrapper::${obj_class}::ISA"} = ('Pixie::o
+bjwrapper', $obj_class);
}
return bless $obj, "Pixie::objwrapper::$obj_class";
}
sub DESTROY {
my $self = shift;
print "wrapper->DESTROY\n";
my $obj_class = ref($self);
$obj_class =~ s/Pixie::objwrapper:://;
if ($obj_class->can('DESTROY')) {
$obj_class->DESTROY($self);
}
}
UPDATE: Fixed some code that was uglier than necessary.
-- O thievish Night, Why should'st thou, but for some felonious end, In thy dark lantern thus close up the stars? --Milton