use strict; package Base; our %types = qw/BASE_TYPE Some::Class/; sub get_type {} package Foo; our @ISA = qw/Base/; our %types = qw/FOO_TYPE Another::Class/; package Bar; our @ISA = qw/Base/; our %types = qw/BAR_TYPE Yet::Another::Class/; # what I want: # get: BASE_TYPE => Some::Class, # FOO_TYPE => Another::Class my %foo_type = Foo->get_type(); # get: BASE_TYPE => Some::Class, # BAR_TYPE => Yet::Another::Class my %bar_type = Bar->get_type();