perlquestion
cwry
<p>In the following code (contrived for illustration):</p>
<code>
use strict;
use warnings;
my %foo;
my %bar;
$bar{'one'} = 1;
my $x = "$bar{'one'} $foo{'one'}";
</code>
<p>Here I am making the deliberate mistake of not initializing <code>$foo{'one'}</code>, and of course I receive:</p>
<code>Use of uninitialized value in concatenation (.) or string at test.pl line 7.</code>
<p>If I receive this warning in a non-trivial program, I can go back and insert some debugging code to check which one of <code>$bar{'one'}</code> or <code>$foo{'one'}</code> is unitialized.</p>
<p>However, is there a way I can direct perl to automatically tell me <i>which</i> of the two (or more) interpolated values were unitialized?</p>
<p>Desired sample output:</p>
<code>Use of uninitialized value ($foo{'one'}) in concatenation (.) or string at test.pl line 7.</code>
<p>If the above is not possible, are there any recommended alternatives? I want to be able to catch (and understand) warnings like this without resorting to rerunning the program with additional tracer code (data dumping, et cetera).</p>
<p>Is the best practice simply to code more defensively and explicitly check all variables are initialized prior to interpolation? I could do that, I guess, but I'm afraid of bloating the code needlessly.</p>