有没有人知道Perl验证器

Mik*_*ley 3 debugging validation perl

我是Perl的新手,刚刚开始使用它,最初学过JavaScript.我想知道是否有可能验证Perl代码的验证器(如JS的Firebug).如果有人知道一个可靠的人,我将不胜感激.我用Google搜索了很多次,收效甚微,而且我们都知道学习新语言时会出现错误.提前致谢!.

Leo*_*era 17

Perl本身呢?

perl -c your_program.pl
Run Code Online (Sandbox Code Playgroud)

如果您在程序开头添加以下内容,您将避免许多麻烦.

use strict;
use warnings;
use diagnostics;
Run Code Online (Sandbox Code Playgroud)

最后,还有Perl :: Critic.

  • 我认为需要阅读一本好的Perl书.http://learn.perl.org/books.html (2认同)

ayu*_*ush 7

这是一个在线perl验证器

要检查语法是否干净,您可以尝试perl -c filename.为了清理代码格式,您可能需要查看PerlTidy..你可能不需要一个vaidator.你可以做些自己的事.

重定向错误消息

默认情况下,错误消息将发送到STDERR.大多数HTTPD服务器将STDERR定向到服务器的错误日志.某些应用程序可能希望保留私有错误日志,与服务器的错误日志不同,或者他们可能希望将错误消息定向到STDOUT,以便浏览器接收它们.

carpout()功能是为此目的而提供的.由于carpout()默认情况下未导出,因此您必须明确地导入它

 use CGI::Carp qw(carpout);
Run Code Online (Sandbox Code Playgroud)

carpout()函数需要一个参数,该参数应该是用于编写错误的打开文件句柄的引用.它应该在CGI应用程序顶部的BEGIN块中调用,以便捕获编译器错误.例:

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

carpout()此时不会为您处理日志上的文件锁定.另外,请注意,这carpout()不适用于内存文件句柄,尽管欢迎使用补丁来解决这个问题.

真正的STDERR没有关闭 - 它被移动到CGI :: Carp :: SAVEERR.当脚本关闭STDOUT和STDERR时,某些服务器在处理CGI脚本时会关闭与浏览器的连接.CGI :: Carp :: SAVEERR可以防止这种情况过早发生.

您可以通过各种方式将文件句柄传递给carpout()."正确"的方法可能是通过对文件句柄GLOB的引用:

carpout(*LOG);

也接受以下语法:

carpout(LOG);
carpout(main::LOG);
carpout(main'LOG);
carpout(\LOG);
carpout(\'main::LOG');
... and so on
Run Code Online (Sandbox Code Playgroud)

FileHandle和其他对象也可以工作.

在浏览器窗口中出现PERL错误

如果要向浏览器发送致命(死亡,忏悔)错误,请要求导入特殊的"fatalsToBrowser"子例程:

 use CGI::Carp qw(fatalsToBrowser);
    die "Bad error here";
Run Code Online (Sandbox Code Playgroud)

现在,致命错误将回显到浏览器以及日志.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!");
Run Code Online (Sandbox Code Playgroud)

您还可以传入代码引用以创建自定义错误消息.在运行时,将使用导致脚本死亡的错误消息文本调用您的代码.例:

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);
}
Run Code Online (Sandbox Code Playgroud)


yst*_*sth 6

因为perl是一种动态语言,所以有许多事情无法验证; 例如,您可以调用编译时不存在的子,因为它可以在运行时创建.静态验证器无法知道呼叫是否正确.

如果您只想知道代码是否编译,请使用perl解释器本身.

如果要检查代码是否符合给定的编码标准,请使用Perl :: Critic.


bti*_*lly 5

有很多方法可以解决这个问题.您可以阅读http://perldoc.perl.org/perldebug.html以了解如何使用调试器,调试器在某些方面类似于Firebug.但是还有很多其他方法可以自动避免问题.

  1. 如果使用use strict启动代码,则会自动捕获许多类常见错误; 使用警告;

  2. http://perltidy.sourceforge.net/重新格式化你的代码,并且很容易发现许多常见的错误.

  3. CPAN模块Perl :: Critic执行自动代码分析以强制执行特定的样式决策.一致的风格使错误更容易追踪.
  4. 使用单元测试.核心模块Test :: More让您可以轻松开始使用它.