In the following code (contrived for illustration):
use strict; use warnings; my %foo; my %bar; $bar{'one'} = 1; my $x = "$bar{'one'} $foo{'one'}";
Here I am making the deliberate mistake of not initializing $foo{'one'}, and of course I receive:
Use of uninitialized value in concatenation (.) or string at test.pl line 7.If I receive this warning in a non-trivial program, I can go back and insert some debugging code to check which one of $bar{'one'} or $foo{'one'} is unitialized.
However, is there a way I can direct perl to automatically tell me which of the two (or more) interpolated values were unitialized?
Desired sample output:
Use of uninitialized value ($foo{'one'}) in concatenation (.) or string at test.pl line 7.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).
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.
In reply to Debugging "Use of uninitialized value" warnings. by cwry
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |