A Note on Efficiency Even though the cache appears to be a multi-dimensional object, it isn't. Consider an expression like: $cache->{'perl-base'}{VersionList}[0] {DependsList}[0]{TargetPkg}{Name} This creates a large number of temporary C++ objects, Perl objects to encapsulate them and lists thereof, so if you intend to access a bunch of attributes of an object it is best to store a copy of the intermediate object rather repeating the process for each attribute. my $v = $cache->{'perl-base'}{VersionList}[0] {DependsList}[0]; my $dep = $v->{TargetPkg}{Name}; $dep .= " ($v->{CompTypeDeb} $v->{TargetVer})" if $v->{TargetVer};