tcf03 has asked for the wisdom of the Perl Monks concerning the following question:

What Im trying to do is easiest explained by some sample code
#!/usr/bin/perl -w use strict; use diagnostics; my %hash; %hash = ( 1 => { ONE => "testdir", TWO => "tmpdir" }, 2 => { LOCATIONA => "$hash{1}{ONE}/$hash{1}{TWO}/my_file.txt +", LOCATIONB => "$hash{1}{TWO}/$hash{1}{ONE}/my_file.txt +" } ); print "$hash{2}{LOCATIONA} = location a\n"; print "$hash{2}{LOCATIONB} = location b\n";
The output I get is this
Use of uninitialized value in concatenation (.) or string at test2 lin +e 7 (#1) (W uninitialized) An undefined value was used as if it were alread +y defined. It was interpreted as a "" or a 0, but maybe it was a mi +stake. To suppress this warning assign a defined value to your variables. To help you figure out what was undefined, perl tells you what ope +ration you used the undefined value in. Note, however, that perl optimiz +es your program and the operation displayed in the warning may not necessa +rily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer +to the concatenation (.) operator, even though there is no . in your program. //my_file.txt = location a //my_file.txt = location b
Is there a way to do this within a hash?

"That which we persist in doing becomes easier, not that the task itself has become easier, but that our ability to perform it has improved."
  --Ralph Waldo Emerson