Coro::Specific - manage coroutine-specific variables.


Coro documentation Contained in the Coro distribution.

Index


Code Index:

NAME

Top

Coro::Specific - manage coroutine-specific variables.

SYNOPSIS

Top

 use Coro::Specific;

 my $ref = new Coro::Specific;

 $$ref = 5;
 print $$ref;

DESCRIPTION

Top

This module can be used to create variables (or better: references to them) that are specific to the currently executing coroutine. This module does not automatically load the Coro module (so the overhead will be small when no coroutines are used).

A much faster method is to store extra keys into %$Coro::current - all you have to do is to make sure that the key is unique (e.g. by prefixing it with your module name). You can even store data there before loading the Coro module - when Coro is loaded, the keys stored in %$Coro::current are automatically attached to the coro thread executing the main program.

You don't have to load Coro::Specific manually, it will be loaded automatically when you use Coro and call the new constructor.

new

Create a new coroutine-specific scalar and return a reference to it. The scalar is guarenteed to be "undef". Once such a scalar has been allocated you cannot deallocate it (yet), so allocate only when you must.

BUGS

Top

The actual coroutine specific values do not automatically get destroyed when the Coro::Specific object gets destroyed.

AUTHOR

Top

 Marc Lehmann <schmorp@schmorp.de>
 http://home.schmorp.de/


Coro documentation Contained in the Coro distribution.
package Coro::Specific;

use common::sense;

our $VERSION = 6.0;

my $idx;

sub new {
   my $var;
   tie $var, Coro::Specific::;
   \$var;
}

sub TIESCALAR {
   my $idx = $idx++;
   bless \$idx, $_[0];
}

sub FETCH {
   $Coro::current->{_specific}[${$_[0]}];
}

sub STORE {
   $Coro::current->{_specific}[${$_[0]}] = $_[1];
}

#sub DESTROY {
#   push @idx, $$_[0];
#}

1;