2008-12-10 7 views
27

Ist es möglich, die aktuelle Quellzeilennummer in Perl zu erhalten? Das Äquivalent in C++ ist __LINE__.Wie kann ich die Quellzeilennummer in Perl drucken?

+0

Ich frage mich aber: warum würden Sie das brauchen? –

+3

Ich habe es verwendet, um den Fortschritt durch einen sehr langen Prozess schnell zu verfolgen, und die Reihenfolge zu überprüfen, wie Breakpoints, aber ohne den Debugger zu verwenden –

+0

@LeonTimmermans: Ich reagiere auf Ihren sehr alten Kommentar darüber, warum ein Perl Programmierer könnte wollen _ _FILE_ _ und _ _ LINE _ _. Im Grunde die gleichen Gründe, warum ein C/C++ - Programmierer sie haben möchte. Z.B. Heute habe ich einen Test überarbeitet, so dass Test :: Differenzen :: eq_or_diff in einer Subroutine aufgerufen wurde. Die gemeldete Zeilennummer befand sich in der Subroutine, von der aus die Subroutine aufgerufen wurde. Das Hinzufügen von __ LINE __ zum Testnamen hilft mir, den fehlgeschlagenen Test zu finden. Wenn ich jetzt einfach ein Makro CODE_LOCATION in Perl5 schreiben könnte. –

Antwort

51
print "File: ", __FILE__, " Line: ", __LINE__, "\n"; 

oder

warn("foo"); 
+4

warn wird auf STDERR gedruckt. – mat

6

Hinweis gibt es ein gotcha mit

perl -e'warn ("foo")‘

foo auf -e Linie 1.

, wenn es mit einem Newline endet es wird nicht Druck die Zeilennummer

perl -e'warn ("foo \ n")‘

foo

Dies ist dokumentiert in "perldoc -f sterben", aber ist vielleicht leicht zu verpassen in der "perldoc -f warn" -Abschnitt der Referenz zu sterben ...

1

Dies druckt die Zeile, wo Sie sind, und auch die „Stack“ (Liste der Linien von der anrufenden Programme (Skripte/modules/etc), die an den Ort führen Sie jetzt sind)

while(my @where=caller($frame++)) { print "$frame:" . join(",",@where) . "\n"; } 
1

„verwenden Karpfen“ und mit den verschiedenen Routinen spielen, und Sie erhalten auch eine stack - nicht sicher, ob dieser Weg besser oder schlechter als die von cnd vorgeschlagene Methode "caller" ist. Ich habe die Variablen LINE und FILE (und wahrscheinlich andere ähnliche Variablen) in C und Perl verwendet, um zu zeigen, wo ich beim Debugging in den Code und andere Informationen gekommen bin, aber außerhalb einer Debug-Umgebung wenig Wert gesehen habe.

Verwandte Themen