#!/usr/bin/perl -w use strict; use lib './poe'; use POE; #------------------------------------------------------------------------------ package Base; use POE::Session; sub new { my $type = shift; my $self = bless [ ], $type; POE::Session->create ( object_states => [ $self => { _start => 'event_start', count => 'event_count', _stop => 'event_stop', } ], ); undef; } sub event_start { my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; print "(base) ", $session->ID, " has started...\n"; $heap->{count} = 0; $kernel->yield( 'count' ); } sub event_count { my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; print "(base) ", $session->ID, " has counted to ", ++$heap->{base}, "...\n"; $kernel->yield( 'count' ) if $heap->{base} < 10; } sub event_stop { my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; print "(base) ", $session->ID, " has stopped...\n"; } #------------------------------------------------------------------------------ package Inheritor; use POE::Session; @Inheritor::ISA = qw(Base); sub event_count { my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; print( "(derived) ", $session->ID, " has counted to ", ++$heap->{derived}, "...\n" ); shift(@_)->SUPER::event_count(@_); } #------------------------------------------------------------------------------ package main; Inheritor->new(); $poe_kernel->run(); exit 0;