POE::Session-create( inline_states => { _start => \&task_start, subscribe => \&subscribe, inmessage => \&inmessage, # some other events ... }, ); my $pq = POE::QUEUE::Array->new(); $poe_kernel->run(); exit; sub task_start { my ($kernel, $heap) = @_[KERNEL, HEAP]; $kernel->yield('xmlmsg_open'); } sub xmlmsg_open { my ($kernel, $session) = @_[KERNEL, SESSION]; # Code for a Vendor based XML message connect # Includes a call to a seperate function that opens the subscription_check } sub subscribe { my ($kernel, $heap, $session, $prearg, $postargs) = @_[KERNEL, HEAP...etc]; $kernel->post( $alias => 'subscribe', InXMLMessageCallBack => $session->postback('inmessage' $alias), # Other postbacks ); } sub inmessage { my ($kernel, $session, $heap, $preargs, $postargs) = @_[KERNEL, SESSION, HEAP...]; $msg = $postargs->[0]; # code that reads something called getBody from the XML and determines the priority of the message. $pq->enqueue( $priority, $msg->getBody); return 1; }