use State; package State::Start; @ISA = ('State'); sub Trig { my $self = shift; $self->level; $self->to('End'); } package State::End; @ISA = ('State'); sub enter { print "reached End"; } package State::Start::Inner; @ISA = ('State::Start'); package main; $fred = State::Start::Inner->new; $fred->Trig();