POE::Session->create( inline_states => { _start => sub { my ($kernel) = @_[KERNEL]; $kernel->alias_add($alias); $heap->{reg} = []; }, xmit => sub { my ($kernel, $heap, $something) = @_[KERNEL, HEAP, ARG0]; foreach my $s (@{$heap->{reg}}) { $kernel->post(@$s, $something); } } join => sub { my ($kernel, $heap, $something) = @_[KERNEL, HEAP, ARG0]; push @{$heap->{reg}}, $something; } split = sub { my ($kernel, $heap, $something) = @_[KERNEL, HEAP, ARG0]; $heap->{reg} = [grep { $_->[0] ne $something->[0] or $_->[1] ne $something->[1] } $something]; return; } } );
This type of event would be good for small "glue" sessions that just interface POE with a worker object.
POE::Session->create( inline_states => { question => sub { my ($kernel, $heap, $back, $question) = @_[KERNEL, HEAP, ARG0, ARG1]; my $ret = $heap->{worker}->question($question); $kernel->post($_[SENDER], $back, $ret); }, } );
Advantages:
- Code and session definition in the same place.
- Less name space noise.
Disadvantages :
- Beyond cut and paste, you can't reuse the code.
- C<<name => sub { ... }>> is less like "normal" perl then C<sub name { ... }>.
- For complex sessions, create() will become large, unwieldly and harder to understand.
See also : /Inline Subrefs, /Package Methods, /Object Methods