NAME

POE::Declarative::Mixin - use different declarative POE packages together

VERSION

version 0.09

SYNOPSIS

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';
};

DESCRIPTION

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.

METHODS

import

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".

export_poe_declarative_to_level LEVEL

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.

SEE ALSO

POE::Declarative

AUTHORS

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

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.