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

Denis Evdokimov evdokimov.denis на gmail.com
Ср Дек 3 12:43:22 PST 2008


Даже лучше заменить
my $transaction_package_isa = '@' . $transaction_package . '::ISA';
eval "$transaction_package_isa = ( 'sowebface::List::Transaction::End',
ref(\$self) )";
на
{
     no strict 'refs';
     *{$transaction_package . '::ISA'} = [
'sowebface::List::Transaction::End', ref($self) ];
}



3 декабря 2008 г. 22:53 пользователь Denis Evdokimov <
evdokimov.denis на gmail.com> написал:

> Может так?
> Правда мне тут не всё нравится, но лучше, чем через AUTOLOAD
>
> package sowebface::List::Transaction;
> use strict;
>
> sub new
> {
>     my ( $class, $self ) = @_;
>     die 'WTF?' unless ref $self;
>     my $transaction_package = ref($self) . '::Transaction';
>     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 было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081203/5f921f9a/attachment.html>


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