...
# populate your %project
readItem(\%project);
...
sub readItem {
my ($project) = @_;
my $sub_project = $project->{...}->{...};
etc.
}
####
my %multi_level = (
'foo' => { 1 => 'A', 2 => 'B' },
'bar' => { 'C' => 'see', 'T' => 'tea' },
);
my $sub_part = $multi_level{foo}; # sub_part is a hashref,
# also pointed at by $multi_level{foo}
print $multi_level{foo}->{1} . "\n"; # works (prints 'A')
$sub_part->{3} = 'C';
print $multi_level{foo}->{3} . "\n"; # works (prints 'C')
my $part_two = $multi_level{foo}->{1}; # part_two is a
# scalar, a copy of the value of $multi_level{foo}->{1},
# namely 'A'. Changing it will not change %multi_level
####
my $a = 'blah';
my $b = $a;
$b = 'foo';
print "$a\n"; # prints 'blah'
print "$b\n"; # prints 'foo'