view Lib/IMPL/Object/AutoDispose.pm @ 275:6253872024a4

*refactoring IMPL::Class
author cin
date Thu, 31 Jan 2013 02:18:31 +0400
parents 8d36073411b1
children
line wrap: on
line source

package IMPL::Object::AutoDispose;
use strict;

sub new {
    my $self = shift;
        
    if (ref $self) {
        return ${$self}->new(@_);
    } else {
        my $obj = shift;
        return bless \$obj, $self;        
    }    
}

sub isa {
    ${shift(@_)}->isa(@_);
}

sub can {
    ${shift(@_)}->can(@_);
}

sub DESTROY {
    ${shift(@_)}->Dispose();
}

sub AUTOLOAD {
    our $AUTOLOAD;
    my ($method) = ($AUTOLOAD =~ m/(\w+)$/);
    
    no strict 'refs';
    
    goto &{*{$AUTOLOAD} = sub {
        ${shift(@_)}->$method(@_);
    }};
}

1;