in reply to Use of uninitialized value in ...

You are free to patch Perl to fix this.

However the problem is that the code which builds the string and finds the uninitialized variable has just been passed pointers to the variables, and not the names. Therefore it really doesn't know the name. Obviously the names of the potential variables are known at compile time, but they are not passed around in the compiled code. (Doing so would make data structures larger and slower.)

If you really wanted to get ambitious you could create a WARN handler that catches the warning and tries to figure out the variable in question. It could look at the warning, attempt to peek at the Perl source (I don't know where that is stored internally, but I'm sure it is in memory somewhere), and use PadWalker to go poking around and try to figure out the variable that caused the error. However to date nobody has gotten irritated and ambitious enough to tackle that project.

(If you did do that, then I'd suggest that you sign up for a CPAN account and put it on CPAN. There are people who would find that very useful...)

Replies are listed 'Best First'.
Re^2: Use of uninitialized value in ...
by chromatic (Archbishop) on Feb 22, 2008 at 22:36 UTC
    You are free to patch Perl to fix this.

    Dave Mitchell fixed it in Perl 5.10.

      He did? Cool! I should keep up with these things more closely.
        Note that while it makes a best effort to determine the variable name (or array/hash subscript), that can't always be unambiguously determined: in which case it falls back to the old format:
        $ perl5100 -we 'my ($x,@y); $x=$y[0]+1' Use of uninitialized value $y[0] in addition (+) at -e line 1. $ perl5100 -we 'my ($x,@y); $x=$y[0]+$y[1]' Use of uninitialized value in addition (+) at -e line 1. Use of uninitialized value in addition (+) at -e line 1. $

        Dave

Re^2: Use of uninitialized value in ...
by Anonymous Monk on Feb 09, 2012 at 20:04 UTC
    You are free to patch Perl to fix this.

    Sorry, this is a really old post, but this REALLY pisses me off. This is exactly the kind of response that gives our community a reputation of being a bunch of self righteous neck beards that take every possible opportunity to feel superior to those less experienced us. It's pretty unlikely that if he had the skill to fix this in Perl, he'd be asking this question on this forum. He wasn't being disrespectful, and unless you're enough of an egghead to have never gotten frustrated, respectfully expressed that frustration and asked for help, but instead patched the offending compiler/interpreter, you should probably keep comments like that to yourself.