somwhere further above: { package RPM_data; #{{{ use constant D => q(-); #D for Dash use constant o => q(.); #o for dot use Data::Vars [qw(N V R A reldir reponame cpeids size)], {cpeids=>sub{ {} } }; # N-keys of this is ref-cnt sub cpeids() { my $p = shift; scalar keys %{$p->{cpeids}} } sub cpeid(;$) { return q(cpeid) unless @_; my $p = shift; my $cpeid = shift; mkARRAY $p->cpeids; push @{$p->cpeids}, $cpeid; my $cpeids = ErV $p, cpeids; push @{$p->cpeids}, $cpeid unless ErV $cpeids, $cpeid; return $p->cpeids($cpeid); } sub new($) { my $p = shift; my $c = ref $p || $p;...} sub new_from_file($) { my $p = shift; my $fname = shift; ... sub new_from_path($) { my $p = shift; my $pthnam = shift;... sub VR () { my $p = shift; $p->{V} .D. $p->{R} } sub NVR () { my $p=shift; $p->{N} .D. $p->VR } sub NVRA () { my $p=shift; $p->NVR .o. $p->{A} } sub relpth() {my $p = shift; pathcat($p->reldir, $p->NVRA .o."rpm")} }##### { package VRs; #{{{ use Types::Core qw(blessed LongSub); use Data::Vars [qw(VRs)], {VRs=>sub{ {} }}; use P; use Dbg(1,1,1); sub vr($;$) { my $p = shift; my $c = ref $p || $p; my $argp = shift; my $vr = ErV $argp, VR; my $vrp; if (@_) { $p->{VR}{$vr} = RPM_data->new(shift); } $p->{VR}{$vr}; } 1;} #}}} ###### (somewhere above: { package RepoVData; #{{{ use strict; use warnings; use mem; use Data::Vars [qw(RepoDB RepoXMLs )], #RDFile_inf { RepoXMLs => sub() { {} }, # HASH{type => RDFile_inf} RepoDB => sub() { {} }, }; # nam=>rpmdata #### $p->{Vcpeid}{$cpeid} = RepoVData->new() unless blessed $p->{Vcpeid}{$cpeid}; $p->{Vcpeid}{$cpeid}{RepoDB} = RepoDB->new() unless blessed $p->{Vcpeid}{$cpeid}{RepoDB} $p->{Vcpeid}{$cpeid}{RepoDB}{$nam} = VR->new() unless blessed $p->{Vcpeid}{$cpeid}{RepoDB}{$nam}; $p->{Vcpeid}{$cpeid}{RepoDB}{$nam}{vr($V, $R) = RPM_data->new({...}) unless blessed $p->{Vcpeid}{$cpeid}{RepoDB}{$nam}{vr($v, $R) ....