With this of event, create() is used to map an event name to a perl subroutine.

POE::Session->create(
  inline_states => {
    _start => \&start_event,
    xmit   => \&xmit_event,
    join   => \&join_event,
    split  => \&split_event,
  },
  args => [$alias],
);

sub start_event {
  my ($kernel, $alias) = @_[KERNEL, ARG0];
  $kernel->alias_add($alias);
  $heap->{reg} = [];
}

sub xmit_event {
  my ($kernel, $heap, $something) = @_[KERNEL, HEAP, ARG0];
  foreach my $s (@{$heap->{reg}}) {
    $kernel->post(@$s, $something);
  }
}

sub join_event {
  my ($sender, $heap, $something) = @_[SENDER, HEAP, ARG0];
  push @{$heap->{reg}}, [$sender->ID, $something];
}

sub split_event {
  my ($sender, $heap, $something) = @_[SENDER, HEAP, ARG0];
  $sender = $sender->ID;
  $heap->{reg} =
    [grep { $_->[0] ne $sender] or $_->[1] ne $something } @{$heap->{reg}];
    } < /perl>
This is the easiest form for a novice to understand.  No packages, no
objects, just straight subroutines like everyone else.

For code reuse, simply reference the subs from another package.
<perl> POE::Session->create(
    inline_states => {
        _start => \&start_event,
        xmit   => \&xmit_event,
        join   => \&one_join_event,
        split  => \&one_split_event,
    },
    args => [$alias],
);
sub one_join_event {
    my ($sender, $heap, $something) = @_[SENDER, HEAP, ARG0];
    $sender = $sender->ID;
    push @{$heap->{reg}}, [$sender, $something]
        unless $heap->{already}{$sender}{$something}++;
}
sub one_split_event {
    my ($sender, $heap, $something) = @_[SENDER, HEAP, ARG0];
    my $sender = $sender->ID;
    if ($something) {
        delete $heap->{already}{$sender}{$something};
        delete $heap->{already}{$sender}
            unless keys %{$heap->{already}{$sender}};
    }
    else {
        delete $heap->{already}{$sender};
    }
    $heap->{reg} =
        [grep { $heap->{already}{$_->[0]} and $heap->{already}{$_->[0]}{$_->[1]} }
            @{$heap->{reg}}];
}

Advantages

Disadvantages

See also: /Anonymous Inline Subrefs, /Package Methods, /Object Methods.