Win32::EventsFilter Win32::EventsFilter::EventLog Win32::EventsFilter::Wevtutil Win32::Events Win32::Events::EventLog Win32::Events::Wevtutil Win32::Evt Win32::Evt::EventLog Win32::Evt::Wevtutil sub Win32::Evt::start { ... } sub Win32::Evt::EventLog::Last { ... } sub Win32::Evt::Wevtutil::Last { ... } sub Win32::Evt::EventLog::GetNth { ... } sub Win32::Evt::Wevtutil::GetNth { ... } #### package Win32::Evt::Darllenydd; use Moo::Role; requires 'Last', 'GetNth', ...; no Moo::Role; package Win32::Evt::EventLog; use Moo; with 'Win32::Evt::Darllenydd'; sub Win32::Evt::EventLog::Last { ... } sub Win32::Evt::EventLog::GetNth { ... } no Moo; ... #### use parent 'Win32::Evt::Darllenydd'; ... package Win32::Evt::Darllenydd; use Carp(); sub Last { Carp::croak( "Last unimplemented" ); } sub GetNth{ Carp::croak( "GetNth unimplemented" ); } ... #### Win32::DiEvt Win32::DiEvt::EventLog Win32::DiEvt::Wevtutil