POE::Declarative::Mixin - use different declarative POE packages together
version 0.09
This is a really poor producer/consumer example, but it shows how the states of each mixin get pulled into the second class.
package Producer; use base qw/ POE::Declarative::Mixin /; use POE; use POE::Declarative; on produce => run { push @{ get(HEAP)->{store} }, get ARG0; }; package Consumer; use base qw/ POE::Declarative::Mixin /; use POE; use POE::Declarative; on consume => run { print "Consuming ", shift @{ get(HEAP)->{store} }, "\n"; yield 'consume' if scalar @{ get(HEAP)->{store} }; }; package ProducerConsumer; use POE; use POE::Declarative; # Our mixins use Consumer; use Producer; on _start => run { for (1 .. 10) { yield produce => $_; } yield 'consume'; };
Mixin classes provide a nice abstraction for joining multiple functions together into a single package. This is similar to multiple inheritance, but doesn't modify @ISA for the class.
@ISA
This provides the basic magic to make this happen. If you are creating a mixin class that needs to further customize import, you'll probably want to see "export_poe_declarative_to_level".
import
This exports the states defined in the mixin to the package specified by level. The most common case for use would be in your mixin:
sub import { my $class = shift; # Do other custom import tasks $class->export_poe_declarative_to_level(1); }
If you do not need to define a custom "import" method, you probably should ignore this method.
POE::Declarative
Andrew Sterling Hanenkamp <hanenkamp@cpan.org>
<hanenkamp@cpan.org>
Copyright 2007 Boomer Consulting, Inc. All Rights Reserved.
This program is free software and may be modified and distributed under the same terms as Perl itself.
To install POE::Declarative, copy and paste the appropriate command in to your terminal.
cpanm
cpanm POE::Declarative
CPAN shell
perl -MCPAN -e shell install POE::Declarative
For more information on module installation, please visit the detailed CPAN module installation guide.