use 5.10.0; package Animal; sub speak { my $self = shift; ref $self and $self = ref $self; say "$self says: ", $self->word; } package Cow; @Cow::ISA = qw(Animal); sub word { "moo" } package Dog; @Cow::ISA = qw(Animal); sub word { "wuff" } package main; Cow->speak; Dog->speak; __END__ Cow says: moo Dog says: wuff