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