NAME

Thread::Isolate::Map - Map/link packages of one thread to many other threads.

DESCRIPTION

The idea of this module is to map a package of one thread to many other threads, saving memory through many threads.

Thread::Isolate::Map supports map for SCALAR, ARRAY, HASH, HANDLE (IO) and CODE symbols.

USAGE

use Thread::Isolate ; ## Is recomended to load it before to save memory.
use Thread::Isolate::Map ;

my $thi = Thread::Isolate->new() ;

$thi->eval(q`
  package Foo ;
    $FOOVAL = 0 ;
`) ;

my $thi1 = Thread::Isolate->new() ;
my $thi2 = Thread::Isolate->new() ;

$thi1->map_package('Foo',$thi) ;
$thi2->map_package('Foo',$thi) ;

$thi1->eval('$Foo::FOOVAL = 10 ;');  ## $FOOVAL is 10 now. (thi1)

$thi2->eval('$Foo::FOOVAL += 10 ;'); ## $FOOVAL is 20 now. (thi2)

$thi->eval('return $Foo::FOOVAL'); ## returns 20. (thi)

As you can see in the code above all the 3 threads share the same package, and the package symbols like $FOOVAL.

METHODS

new (PACKAGE , THREAD)

Maps a local package to a thread package.

PACKAGE

The package to map.

THREAD

The Thread::Isolate object that has the real package.

scan_pack_entries ( THREAD? , PACKAGE , RECURSIVE )

Scan the symbol table entries of a package.

THREAD?

If defined will scan the package inside the thread.

PACKAGE

The package to scan.

RECURSIVE

If TRUE will do a recursive scan, getting symbols of sub-packages.

Mapping HANDLEs (IO)

All the mapped HANDLEs (IO) will be automatically flushed ($| = 1), since is not possible to flush from an external thread, also will avoid lose of output data when the HANDLE is not closed explicity when the process goes out.

SEE ALSO

Thread::Isolate, Thread::Isolate::Pool.

AUTHOR

Graciliano M. P. <gmpassos@cpan.org>

I will appreciate any type of feedback (include your opinions and/or suggestions). ;-P

COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.