2008-12-10 16 views
27

Czy można uzyskać bieżący numer linii źródłowej w Perlu? Odpowiednikiem w C++ jest __LINE__.Jak mogę wydrukować numer wiersza źródłowego w Perlu?

+0

Zastanawiam się jednak: dlaczego miałbyś tego potrzebować? –

+3

Użyłem go do szybkiego śledzenia postępu przez bardzo długi proces i sprawdzenia kolejności, w jakiej wykonywane są operacje, takich jak punkty przerwania, ale bez korzystania z debugera: –

+0

@LeonTimmermans: Odpowiadam na twój bardzo stary komentarz o tym, dlaczego Perl programista może chcieć _ _FILE_ _ i _ _ LINE _ _. Zasadniczo z tych samych powodów, dla których programista C/C++ może ich chcieć. Na przykład. dzisiaj refaktoryzowałem test, aby w podprocedurze wywołano test :: Differences :: eq_or_diff. Zgłoszony numer linii był w podprocedurze, a nie w miejscu wywołania podprogramu. Dodanie __ LINE __ do nazwy testu pomaga mi znaleźć test na awarię. Teraz, gdybym mógł napisać makro CODE_LOCATION w Perl5. –

Odpowiedz

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

lub

warn("foo"); 
+4

ostrzeżenie zostanie wydrukowane na STDERR. – mat

6

Uwaga istnieje haczyka z

perl -e'warn ("foo")”

foo na -e linii 1.

jeśli kończy się znakiem nowej linii to nie będzie druku numer linii

Perl -e'warn ("foo \ n")”

bla

Jest to udokumentowane w "perldoc -f die", ale być może łatwo go przeoczyć w sekcji "perldoc -f warn" w odniesieniu do umrzeć ...

1

To wypisuje linię, w której jesteś, a także w „stos” (lista linii z programów telefonicznych (skrypty/moduły/etc), które prowadzą do miejsca, jesteś teraz)

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

„Użyj Carp” i bawić się z różnych procedur i można również uzyskać stack - nie wiem, czy ta metoda jest lepsza czy gorsza od metody "caller" sugerowanej przez cnd. Użyłem zmiennych LINE i FILE (i prawdopodobnie innych podobnych zmiennych) w C i Perlu, aby pokazać, gdzie dostałem kod i inne informacje podczas debugowania, ale widziałem małą wartość poza środowiskiem debugowania.

Powiązane problemy