#!perl
# $Id: 01_basics.perl 200 2009-07-27 05:01:45Z rcaputo $
# Simple call and return in POE::Stage.
# Define a simple class that does something and returns a value.
{
package Helper;
use POE::Stage qw(:base self req);
sub on_init { undef }
sub do_something :Handler {
print "Helper (", self, ") is executing a request.\n";
req->emit(args => { value => "EmitValue123" });
req->return(args => { value => "ReturnValueXyz" });
}
}
# Define an application class to use the helper.
{
package App;
use POE::Stage::App qw(:base expose);
sub on_init { undef }
sub on_run {
my $req_helper = Helper->new();
my $req_helper_request = POE::Request->new(
stage => $req_helper,
method => "do_something",
on_return => "catch_return",
on_emit => "catch_emit",
);
my (%req_hash, @req_array);
%req_hash = ( abc => 123, xyz => 890 );
@req_array = qw( a e i o u y );
print "App: Calling $req_helper via $req_helper_request\n";
# This is passed back in the response context to $helper_request.
expose $req_helper_request => my $hr_name;
$hr_name = "test response context";
}
sub catch_return :Handler {
my (
$arg_value,
$req_helper, $req_helper_request, %req_hash, @req_array,
$rsp_name,
);
print(
"App return: return value '$arg_value'\n",
"App return: $req_helper was called via $req_helper_request\n",
"App return: hash keys: ", join(" ", keys %req_hash), "\n",
"App return: hash values: ", join(" ", values %req_hash), "\n",
"App return: array: @req_array\n",
"App return: rsp: $rsp_name\n",
);
}
sub catch_emit :Handler {
my (
$arg_value,
$req_helper, $req_helper_request, %req_hash, @req_array,
$rsp_name,
);
print(
"App emit: return value '$arg_value'\n",
"App emit: $req_helper was called via $req_helper_request\n",
"App emit: hash keys: ", join(" ", keys %req_hash), "\n",
"App emit: hash values: ", join(" ", values %req_hash), "\n",
"App emit: array: @req_array\n",
"App emit: rsp name = $rsp_name\n",
);
$rsp_name = "modified in catch_emit";
}
}
# Create and start the application.
App->new()->run();
exit;
__END__
App: Calling Helper=HASH(0x18d82fc) via POE::Request=ARRAY(0x181d03c)
Helper (Helper=HASH(0x18d82fc)) is executing a request.
App emit: return value 'EmitValue123'
App emit: Helper=HASH(0x18d82fc) was called via POE::Request=ARRAY(0x181d03c)
App emit: hash keys: abc xyz
App emit: hash values: 123 890
App emit: array: a e i o u y
App emit: rsp name = test response context
App return: return value 'ReturnValueXyz'
App return: Helper=HASH(0x18d82fc) was called via POE::Request=ARRAY(0x181d03c)
App return: hash keys: abc xyz
App return: hash values: 123 890
App return: array: a e i o u y
App return: rsp: modified in catch_emit