Mercurial > pub > Impl
diff lib/IMPL/Object/AutoDispose.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/IMPL/Object/AutoDispose.pm Fri Sep 04 19:40:23 2015 +0300 @@ -0,0 +1,38 @@ +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; \ No newline at end of file