Кто-нибудь знает валидатор Perl? - PullRequest
3 голосов
/ 03 февраля 2011

Я очень новичок в Perl и только начал работать с ним, сначала изучив JavaScript.Мне интересно, есть ли валидатор для проверки кода Perl (как Firebug для JS).Если кто-нибудь знает о надежном, это будет с благодарностью.Я много раз гуглял с небольшим успехом, и, как мы все знаем, изучая новый язык, ошибки гарантированы.Заранее спасибо!

Ответы [ 4 ]

17 голосов
/ 03 февраля 2011

А как насчет самого Perl?

perl -c your_program.pl

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

use strict;
use warnings;
use diagnostics;

Наконец, есть Perl:: критик .

7 голосов
/ 03 февраля 2011

это онлайн-валидатор perl

Для проверки правильности синтаксиса вы можете попробовать perl -c filename.Для очистки кода в формате, вы можете посмотреть PerlTidy .,Вам может не понадобиться vaidator.Вы можете сделать что-то самостоятельно.

ПЕРЕСЫЛКА СООБЩЕНИЙ ОБ ОШИБКАХ

По умолчанию сообщения об ошибках отправляются в STDERR.Большинство HTTPD-серверов направляют STDERR в журнал ошибок сервера.Некоторые приложения могут захотеть хранить личные журналы ошибок, отличные от журнала ошибок сервера, или они могут направлять сообщения об ошибках в STDOUT, чтобы их принимал браузер.

Для этого предусмотрена функция carpout().цель.Поскольку carpout() по умолчанию не экспортируется, вы должны импортировать его явно, сказав

 use CGI::Carp qw(carpout);

Функция carpout () требует один аргумент, который должен быть ссылкой на открытый дескриптор файла для записи ошибок.Он должен вызываться в блоке BEGIN в верхней части приложения CGI, чтобы ошибки компилятора были обнаружены.Пример:

 BEGIN {
    use CGI::Carp qw(carpout);
    open(LOG, ">>/usr/local/cgi-logs/mycgi-log") or
    die("Unable to open mycgi-log: $!\n");
    carpout(LOG);
    }

carpout() на данный момент не обрабатывает блокировку файлов в журнале.Кроме того, обратите внимание, что carpout() не работает с дескрипторами файлов в памяти, хотя патч будет приветствовать это.

Настоящий STDERR не закрыт - он перемещается в CGI :: Carp:: SAVEERR.Некоторые серверы при работе со скриптами CGI закрывают соединение с браузером, когда скрипт закрывает STDOUT и STDERR.CGI :: Carp :: SAVEERR предназначен для предотвращения преждевременного возникновения этого.

Вы можете передавать файловые дескрипторы в carpout () различными способами.«Правильным» способом может быть верхняя ссылка на файловый дескриптор GLOB:

carpout (* LOG);

также принимаются следующие синтаксисы:

carpout(LOG);
carpout(main::LOG);
carpout(main'LOG);
carpout(\LOG);
carpout(\'main::LOG');
... and so on

FileHandle и другие объекты также работают.

В ОШИБКЕ БРАУЗЕРА ВХОДЯТ ОШИБКИ PERL

Если вы хотите отправить в браузер фатальные ошибки (die, confess),попросить импортировать специальную подпрограмму "fatalsToBrowser":

 use CGI::Carp qw(fatalsToBrowser);
    die "Bad error here";

Фатальные ошибки теперь будут отображаться как в браузере, так и в журнале.CGI :: Carp организует отправку минимального HTTP-заголовка в браузер, так что будут видны даже ошибки, возникающие на ранней стадии компиляции.Неустранимые ошибки по-прежнему будут направлены только в файл журнала (если они не перенаправлены с помощью carpout).

* Обратите внимание, что fatalsToBrowser не работает с mod_perl версии 2.0 и выше. *

Изменениесообщение по умолчанию

По умолчанию за сообщением об ошибке программного обеспечения следует примечание для связи с веб-мастером по электронной почте с указанием времени и даты ошибки.Если это сообщение вам не нравится, вы можете изменить его, используя процедуру set_message().Это не импортируется по умолчанию;Вы должны импортировать его в строке use ():

use CGI::Carp qw(fatalsToBrowser set_message);
set_message("It's not a bug, it's a feature!");

Вы также можете передать ссылку на код для создания специального сообщения об ошибке.Во время выполнения ваш код будет вызываться с текстом сообщения об ошибке, из-за которого скрипт умер.Пример:

use CGI::Carp qw(fatalsToBrowser set_message);
BEGIN {
sub handle_errors {
my $msg = shift;
print "<h1>Oh gosh</h1>";
print "<p>Got an error: $msg</p>";
}
set_message(\&handle_errors);
}
6 голосов
/ 03 февраля 2011

Поскольку perl является динамическим языком, есть много вещей, которые невозможно проверить;Например, вы можете вызвать подпрограмму, которая не существует во время компиляции, потому что она может быть создана во время выполнения.Статический валидатор не может узнать, правильный ли вызов или нет.

Если все, что вам нужно, это узнать, компилируется ли код, используйте сам интерпретатор perl.чтобы проверить код на соответствие указанным стандартам кодирования, используйте Perl :: Critic .

5 голосов
/ 03 февраля 2011

Есть много способов решить эту проблему.Вы можете прочитать http://perldoc.perl.org/perldebug.html, чтобы узнать, как использовать отладчик, который в чем-то похож на Firebug.Но есть много других способов автоматически избежать проблем.

  1. Многие классы распространенных ошибок обнаруживаются автоматически, если вы начинаете свой код с использованием strict;используйте предупреждения;

  2. http://perltidy.sourceforge.net/ переформатирует ваш код и упростит много общих ошибок.

  3. Модуль CPAN Perl :: Criticвыполняет автоматический анализ кода для обеспечения выполнения определенных стилевых решений.Последовательный стиль облегчает поиск ошибок.
  4. Используйте модульные тесты.Основной модуль Test :: More позволяет легко начать работу с этим.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...