[Moscow.pm] Как правиьно сделать хранитель транзакции ?

Denis Evdokimov evdokimov.denis на gmail.com
Ср Дек 3 11:53:59 PST 2008


Может так?
Правда мне тут не всё нравится, но лучше, чем через 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";
}
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081203/e407fb55/attachment.html>


Подробная информация о списке рассылки Moscow-pm