It's a limitation rather than a bug. By the time perl discovers that it has an uninitialised value, it has already executed a whole series of ops (pad variable load, deref, hash lookup, concat) that lead up to that point. I added the facility in 5.10.0 where at that point it backs up, searches back through the optree, and tries to figure out what was executed and what triggered loading the uninit value. This is based on a "reasonable effort", and is by no means comprehensive, as that would involve huge complexity.
Dave.