Какова цель #line директив perl?

Директивы строки (#line) используются для реконфигурирования идеи perl текущего имени файла и номера строки. Когда требуется, чтобы, это получает правильное имя файла и номер строки (в сообщении об ошибке)?

13
задан brian d foy 28 March 2010 в 18:53
поделиться

3 ответа

Обычно такие маркеры помещены в код, который был предварительно обработан или сгенерирован механически, чтобы вернуться к источнику, созданному человеком.

Например, если существовала программа, конвертирующая Python в Perl, она могла бы вставить

# line 812 "foo.py"

, чтобы сообщения об ошибках относились к исходному коду Python, что было бы более понятным для программиста.

16
ответ дан 1 December 2019 в 20:29
поделиться

Они полезны при переносе сценария Perl в другой файл, как это делает pl2bat. Perl не видит пакетных команд в начале файла, что лишает его представления о номерах строк. Директива #line в начале исходного кода Perl компенсирует это.

7
ответ дан 1 December 2019 в 20:29
поделиться

В дополнение к уже упомянутым причинам perl имеет (настоятельно не рекомендуется) параметр -P , который запускает Perl-файл через препроцессор C перед его запуском. Поскольку большинство препроцессоров C будут использовать строковые директивы при включении или удалении части файла, поэтому любые ошибки будут сообщаться с того места, где они были расположены в исходном источнике, а не в обработанном источнике.

Строковые директивы также могут быть очень полезны, если вы генерируете код в строках, который затем передается в eval . Обычно, если в таком коде есть предупреждение или ошибка, вы получаете сообщение об ошибке типа «умер на (eval 1) строке 1». Используя строковые директивы, вы можете указать полезное имя файла и номер строки.

1
ответ дан 1 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: