2008-12-10 4 views
27

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

+0

Мне интересно: зачем вам это нужно? –

+3

Я использовал его, чтобы быстро отслеживать прогресс через очень длительный процесс и проверять, что все делается, как точки останова, но без использования отладчика. –

+0

@LeonTimmermans: Я отвечаю на ваш очень старый комментарий о том, почему Perl программист может захотеть _ _FILE_ _ и _ _ LINE _ _. В принципе, те же причины, по которым может понадобиться программист C/C++. Например. сегодня я реорганизовал тест, чтобы в подпрограмме вызывается Test :: Differences :: eq_or_diff. Номер строки был указан в подпрограмме, в которой не была вызвана подпрограмма. Добавление __ LINE __ в тестовое имя помогает мне найти неудачный тест. Теперь, если бы я мог написать макрос CODE_LOCATION в Perl5. –

ответ

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

или

warn("foo"); 
+4

предупреждение будет печатать на STDERR. – mat

6

Примечание есть глюк с

PERL -e'warn ("Foo")»

обув на -е линии 1.

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

Perl -e'warn ("Foo \ п")»

Foo

Это отражено в «perldoc -f умереть», но, возможно, легко пропустить в «perldoc -f предупредит» справочный раздел, чтобы умереть ...

1

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

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

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

Смежные вопросы