Как я могу напечатать номер исходной строки в Perl?

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

10.12.2008 08:55:29
Мне вот интересно: зачем тебе это?
Leon Timmermans 10.12.2008 11:36:52
Я использовал его, чтобы быстро отслеживать ход выполнения очень долгого процесса и проверять порядок выполнения заданий, таких как точки останова, но без использования отладчика
David Sykes 15.12.2008 09:11:39
@LeonTimmermans: Я отвечаю на ваш очень старый комментарий о том, почему программист Perl может хотеть _ FILE _ и _ _ LINE _ _. По сути, те же причины, по которым программист на C / C ++ может захотеть их. Например, сегодня я реорганизовал тест, чтобы в подпрограмме вызывался Test :: Differences :: eq_or_diff. Указанный номер строки был в подпрограмме, а не в том месте, откуда была вызвана подпрограмма. Добавление __ LINE __ к имени теста помогает мне найти проваленный тест. Теперь, если бы я мог просто написать макрос CODE_LOCATION в Perl5.
Krazy Glew 22.11.2015 21:42:02
5 ОТВЕТОВ
РЕШЕНИЕ
print "File: ", __FILE__, " Line: ", __LINE__, "\n";

или

warn("foo");
57
10.12.2008 09:01:07

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

11
10.12.2008 14:07:02

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

perl -e'warn ("foo") '

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

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

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

Foo

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

8
11.12.2008 02:34:26

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

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

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

1
17.10.2014 22:28:48