package Baz; sub new { my ($class) = @_; return bless({}, $class); } sub example { my ($self) = @_; if (ref($self) ne __PACKAGE__) { require Carp; Carp::croak( "Method &" . __PACKAGE__ . "::example must not be inherited" ); } print(ref($self) . " ok\n"); } package Baz::Foo; @ISA = 'Baz'; package main; Baz ->new()->example(); # ok. Baz::Foo->new()->example(); # dies.