Даже лучше заменить<br>my $transaction_package_isa = &#39;@&#39; . $transaction_package . &#39;::ISA&#39;;<br>eval &quot;$transaction_package_isa = ( &#39;sowebface::List::Transaction::End&#39;, ref(\$self) )&quot;;<br>
на<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; no strict &#39;refs&#39;;<br>&nbsp;&nbsp;&nbsp;&nbsp; *{$transaction_package . &#39;::ISA&#39;} = [ &#39;sowebface::List::Transaction::End&#39;, ref($self) ];<br>}<br><br><br><br><div class="gmail_quote">3 декабря 2008 г. 22:53 пользователь Denis Evdokimov <span dir="ltr">&lt;<a href="mailto:evdokimov.denis@gmail.com">evdokimov.denis@gmail.com</a>&gt;</span> написал:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Может так?<br>Правда мне тут не всё нравится, но лучше, чем через AUTOLOAD<div class="Ih2E3d">
<br><br>package sowebface::List::Transaction;<br>use strict;<br><br></div><div class="Ih2E3d">sub new<br>{<br>&nbsp;&nbsp;&nbsp; my ( $class, $self ) = @_;<br>&nbsp;&nbsp;&nbsp; die &#39;WTF?&#39; unless ref $self;<br></div>
&nbsp;&nbsp;&nbsp; my $transaction_package = ref($self) . &#39;::Transaction&#39;;<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;<div class="Ih2E3d">
<br><br>sub DESTROY<br>{<br>&nbsp;&nbsp;&nbsp; my $self = shift;<br>
&nbsp;&nbsp;&nbsp; $self-&gt;transaction_end();<br>}<br><br></div>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>
</blockquote></div><br>