package Super::Class; # now store a global class_idx in addition to the individual # indexes on each class my $class_idx = 0; sub NEXT_CLASS_IDX { return $class_idx++ }; my $class_indexes = {}; sub NEXT_IDX { my $class = shift; return $class_indexes->{$class}++; } use constant CLASS_IDX => __PACKAGE__->NEXT_CLASS_IDX(); use constant FOO_IDX => __PACKAGE__->NEXT_IDX(); # 0 use constant BAR_IDX => __PACKAGE__->NEXT_IDX(); # 1 use constant BAZ_IDX => __PACKAGE__->NEXT_IDX(); # 2 package Other::Sub::Class; BEGIN {our @ISA = qw(Super::Class)}; use constant CLASS_IDX => __PACKAGE__->NEXT_CLASS_IDX(); use constant DIFFERENT_IDX => __PACKAGE__->SUPER::NEXT_IDX(); #set to 0 package Sub::Class; BEGIN {our @ISA = qw(Super::Class)}; use constant CLASS_IDX => __PACKAGE__->NEXT_CLASS_IDX(); use constant OTHER_IDX => __PACKAGE__->SUPER::NEXT_IDX(); #also set to 0