use 5.10.1; use MooseX::Declare; class Base { sub baz { my ($self,$x)= @_; say "Baz called: " . $self . " ($x)"; } } #end of Base class Derived { method foo (Num $x) { say "Foo called: " . ref($self) . " ($x)"; } sub bar { my ($self,$x)= @_; say "Bar called: " . ref($self) . " ($x)"; } } #end of Derived say "I'm running."; my $d= Derived->new; $d->foo (1); #Derived->foo(2); #cannot call as static # this one is allowed. $d->bar (1); Derived->bar(2); $d->baz(1); Base->baz(2); Derived->baz(3); # does not find it!