package Foo; sub new { bless {}, shift } sub foo { my $self = shift; if (ref $self) { print "Instance method called on $self\n"; } else { print "Class method called on class $self\n"; } } package Bar; use parent -norequire, 'Foo'; package main; Foo->foo; # "Class method called on class Foo" Foo->new->foo; # "Instance method called on Foo=HASH(0x...)" Bar->foo; # "Class method called on class Bar" Bar->new->foo; # "Instance method called on Bar=HASH(0x...)"