Получение результатов тега perl -w в файл - PullRequest
3 голосов
/ 02 марта 2010

Можно ли добавить тег -w в первую строку Perl-программы, затем запустить программу из оболочки типа bash или dos и записать все предупреждения в файл?

perl somescript.pl > somefile.txt

Это возврат к школьной проверке программ COBOL в школе. Я хотел бы, чтобы все предупреждения были передо мной на листе бумаги, чтобы я мог просмотреть мою программу и исправить их один за другим. Если приведенная выше команда не работает, есть ли программный способ получить все предупреждения скрипта в файл? Спасибо, ребята!

Ответы [ 2 ]

4 голосов
/ 02 марта 2010

Попробуйте это:

perl somescript.pl 2&> somefile.txt

Когда вы используете обычное перенаправление (>), вы перенаправляете только стандартный поток вывода программы, тогда как предупреждения сохраняются в стандартный ошибка выходной поток. См., Например, Справочное руководство Bash .

В CPAN также имеется модуль Vi :: QuickFix , который может сохранять предупреждения в файл, который можно загрузить в Vim, и проверять все предупреждения, не просматривая номера строк вручную. (Google для vim quickfix .) Однако я не пробовал сам.

1 голос
/ 02 марта 2010

zoul обработал перенаправление, так что вот удивительно сложный ответ на предупреждения.

Просто вызовите программу так: perl -w script.pl

Это заставляет предупреждения включаться повсюду в скрипте и во всех модулях. Действительно лучше использовать прагму предупреждений в каждом написанном вами модуле. См. perldoc perllexwarn для получения дополнительной информации по этому вопросу.

Еще одна хитрость, которая хороша при отладке, это использование Carp :: Always . Если форсирует полную трассировку стека при каждой ошибке. Я нахожу это очень очень полезным. Просто запустите ваш скрипт так:

perl -MCarp::Always somescript.pl

или получить его в файл:

perl -MCarp::Always somescript.pl 2&> somefile.txt

И, наконец, я отступлю от вашего вопроса немного подробнее. Многим людям нравится использовать свой код, используя библиотеку журналов, такую ​​как Log4Perl . Подобные инструменты позволяют вам включить ведение журнала на определенном уровне (например, обычном или отладочном) или в определенных частях вашего приложения при отдельных запусках вашего кода. Это последняя (?) Эволюция оператора отладочной печати. Это может быть очень полезно при отладке сбоев как в процессе разработки, так и в полевых условиях после того, как вы достигли фазы обслуживания.

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