Your
readItem() subroutine suggests the need for access to
values without much typing. If you also desire to assign
new values, why not use an alias? Like so:
*label= \$project{$activeProject}
{components}
{Software}
{subComponents}
{Database}
{label} ;
You read the value using print $lable;,
and assign a new value using '$label='Test-2'; .
This is a lot shorter than the OP which exhibited the
full train of variables, and was coded like this:
$project{$activeProject}
{components}
{Software}
{subComponents}
{Database}
{label}
= 'Test-2';