Anscheinend gibt es da ein CPAN Modul:
uninit. Allerdings funktioniert es bei mir nicht; ich denke es ist veraltet. (edit: Es ist vom 30. Oktober 2001, also perl 5.6/5.8 glaube ich.)
Eigentlich finde ich die Meldungen so auch in Ordnung. Wenn es zu ungenau ist, kann man schließlich das betreffende Statement weiter unterteilen.
Wenn du es unbedingt anders brauchst, musst du wohl selbst ran. Zum Beispiel mit
B, so wie es auch
uninit versucht. Oder du gehst über den Quelltext, dass ist aber sicherlich recht fehleranfällig, dafür jedoch schnell programmiert.
edit2: Vielleicht noch zu 1) Die Informationen sind 2 verschiedene: Das aktuelle Verhalten gibt die Zeile an, in welcher das "fehlerhafte" Statement beginnt, deine Variante gäbe die Zeile an, in welcher der uninitialisierte Wert "steht" bzw. das Konstrukt, welches undef liefert. Beide Angaben sind hilfreich.
Darüber hinaus könnte ich mir vorstellen, - ohne wirkliche Ahnung von perl-Bytecode zu haben - dass nicht bei jedem B::OP hinterlegt ist, in welcher Zeile der dazugehörige Code steht. Manche Abschnitte werden auch noch optimiert, sodass der Bezug verloren gehen kann. Diezbezüglich denke ich, wird bei jedem
Statementbeginn die Zeile hinterlegt sein.
MfG
Last edited: 2011-07-10 14:48:03 +0200 (CEST)
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'