in reply to Re-using a hash value in same hash?

When you declare a variable with my, the declaration takes effect for the following statement. This allows you to do things like:
#!perl my $x = 'outer'; { my $x = $x; # new $x, copy value from old $x print "$x\n"; $x = 'inner'; print "$x\n"; } print "$x\n"; __END__
In your code, you need to declare %HoH before you reference it. For example:
my %HoH; %HoH = ( yadda1 => { key1 => "value1", key2 => &GetValue, # returns date string key3 => &Compare($var1,$HoH{yadda1}{key2}), }, yadda2 => { key1 => "value1", key2 => &GetValue, # returns date string key3 => &Compare($var1,$HoH{yadda2}{key2}), }, );
That will avoid the warning from strict, but it doesn't actually solve the problem. When you assign to a variable, if you refer to that same variable on the RHS of the assignment, you will get the old value of the variable. This is a lot like what happens with my:
my %HoH = ( key1 => 'first' ); %HoH = ( key1 => 'second', key2 => $HoH{key1}, );
$HoH{key2} will be 'first', because that was the value of $HoH{key1} when the RHS of the assignment was evaluated.

I would suggest you do something like this:

my $date_string = &GetValue; my $comparison = &Compare($var1, $date_string); %HoH = ( yadda1 => { key1 => "value1", key2 => $date_string, key3 => $comparison, }, yadda2 => { key1 => "value1", key2 => $date_string key3 => $comparison, }, );