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