Как я могу напечатать номер исходной строки в Perl? - PullRequest
30 голосов
/ 10 декабря 2008

Возможно ли получить текущий номер строки источника в Perl? Эквивалент в C ++ - __LINE__.

Ответы [ 5 ]

54 голосов
/ 10 декабря 2008
print "File: ", __FILE__, " Line: ", __LINE__, "\n";

или

warn("foo");
10 голосов
/ 10 декабря 2008

Литерал __LINE__ описан в разделе Специальные литералы справочной страницы perldata .

7 голосов
/ 11 декабря 2008

Обратите внимание, что есть ошибка с

perl -e'warn ("foo") '

foo в -e строке 1.

если он заканчивается новой строкой, он не будет печатать номер строки

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

Foo

Это задокументировано в "perldoc -f die", но, возможно, его легко не заметить в разделе "perldoc -f warn" для die ...

1 голос
/ 18 октября 2014

"используйте Carp" и играйте с различными процедурами, и вы также получаете стек - не уверен, что этот способ лучше или хуже, чем метод "вызывающего", предложенный cnd. Я использовал переменные LINE и FILE (и, возможно, другие аналогичные переменные) в C и Perl, чтобы показать, где я попал в код и другую информацию при отладке, но не видел большого значения вне среды отладки.

1 голос
/ 26 февраля 2012

Это печатает строку, где вы находитесь, а также «стек» (список строк из вызывающих программ (скриптов / модулей / и т. Д.), Которые ведут к месту, где вы сейчас находитесь)

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