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