use strict; use warnings; use Data::Dump qw/pp dd/; package Class1 { use constant cfg => { a => 1 }; }; package Class2 { use parent -norequire, 'Class1'; use constant cfg => { %{__PACKAGE__->SUPER::cfg}, b => 2 }; }; package Class3 { use parent -norequire, 'Class2'; use constant cfg => { %{__PACKAGE__->SUPER::cfg}, c => 3 }; sub meth { warn "a is ",cfg->{a} } }; pp Class1::cfg, Class2::cfg, Class3::cfg ; Class3->meth();