Может так?<br>Правда мне тут не всё нравится, но лучше, чем через AUTOLOAD<br><br>package sowebface::List::Transaction;<br>use strict;<br><br>sub new<br>{<br>&nbsp;&nbsp;&nbsp; my ( $class, $self ) = @_;<br>&nbsp;&nbsp;&nbsp; die &#39;WTF?&#39; unless ref $self;<br>
&nbsp;&nbsp;&nbsp; my $transaction_package = ref($self) . &#39;::Transaction&#39;;<br>&nbsp;&nbsp;&nbsp; my $transaction_package_isa = &#39;@&#39; . $transaction_package . &#39;::ISA&#39;;<br>&nbsp;&nbsp;&nbsp; eval &quot;$transaction_package_isa = ( &#39;sowebface::List::Transaction::End&#39;, ref(\$self) )&quot;;<br>
&nbsp;&nbsp;&nbsp; my $new_self = bless {%$self}, $transaction_package;<br>&nbsp;&nbsp;&nbsp; $new_self-&gt;transaction_begin();<br>&nbsp;&nbsp;&nbsp; return $new_self;<br>}<br><br>package sowebface::List::Transaction::End;<br><br>sub DESTROY<br>{<br>&nbsp;&nbsp;&nbsp; my $self = shift;<br>
&nbsp;&nbsp;&nbsp; $self-&gt;transaction_end();<br>}<br><br>package My::Test;<br><br>my $test = bless {};<br>my $tras_obj = sowebface::List::Transaction-&gt;new($test);<br>$tras_obj-&gt;work();<br><br>sub work<br>{<br>&nbsp;&nbsp;&nbsp; print &quot;I work, maybe...\n&quot;;<br>
&nbsp;&nbsp;&nbsp; sleep 5;<br>}<br><br>sub transaction_begin<br>{<br>&nbsp;&nbsp;&nbsp; print &quot;transaction_begin\n&quot;;<br>}<br><br>sub transaction_end<br>{<br>&nbsp;&nbsp;&nbsp; print &quot;transaction_end\n&quot;;<br>}<br><br>