view Lib/IMPL/Object/AutoDispose.pm @ 369:7c784144d2f1

Implemented object metadata class, cleanup
author cin
date Mon, 09 Dec 2013 17:35:34 +0400
parents 6253872024a4
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;