view lib/IMPL/Object/AutoDispose.pm @ 412:30e8c6a74937 ref20150831

working on di container (role based registrations)
author cin
date Mon, 21 Sep 2015 19:54:10 +0300
parents c6e90e02dd17
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;