Ivan Ratnikov > Coro-LocalScalar-0.21 > Coro::LocalScalar

Download:
Coro-LocalScalar-0.21.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.21   Source  

NAME ^

Coro::LocalScalar - local() for Coro

ABOUT ^

Perl local() function unuseful for Coro threads. This module uses tie magick to make scalar local for each Coro thread. Unlike Coro::Specific this module destroys all data attached to coroutine when coroutine gets destroyed. It's useful when you need to call destructors of coroutine local objects when coroutine destroyed. And you can easily localize value of hash with this module. It has an overhead of calling one callback per localized variable when coroutine is destroyed.

SYNOPSIS ^

        use Coro;
        use Coro::LocalScalar;
        use Coro::EV;
        
        my $scalar;
        
        Coro::LocalScalar->new->localize($scalar);
        
        async {
                $scalar = "thread 1";
                print "1 - $scalar\n";
                cede;
                print "3 - $scalar\n";
                cede;
                print "5 - $scalar\n";
                
        };
        
        async {
                $scalar = "thread 2";
                print "2 - $scalar\n";
                cede;
                print "4 - $scalar\n";
                cede;
                print "6 - $scalar\n";
        };
        EV::loop;

prints 1 - thread 1 2 - thread 2 3 - thread 1 4 - thread 2 5 - thread 1 6 - thread 2

        my $obj = Coro::LocalScalar->new;
        
                # no tie magick used
        $obj->value("data");
        $obj->value = "data"; 
        my $value = $obj->value;
        
        #or
        
        my $local_lvalue_closure = $obj->closure; # lvalue coderef
        
        $local_lvalue_closure->() = "local data"; # no tie magick used
        

        
        my $testobj = Someclass->new;
        
        # attach setter/getter and tied hash element to your object
        $obj->attach($testobj, 'element_local_in_coros');
        
        $testobj->element_local_in_coros("data");
        $testobj->element_local_in_coros = "data";
        
        $testobj->{element_local_in_coros}; # tie magick used
syntax highlighting: