我是Perl的新手,刚刚开始使用它,最初学过JavaScript。我想知道是否有可能验证Perl代码的验证器(如JS的Firebug)。如果有人知道一个可靠的人,我将不胜感激。我用Google搜索了很多次,收效甚微,而且我们都知道学习新语言时会出现错误。提前谢谢!。
答案 0 :(得分:17)
Perl本身怎么样?
perl -c your_program.pl
如果您在程序开头添加以下内容,则可以避免许多麻烦。
use strict;
use warnings;
use diagnostics;
最后,有Perl::Critic。
答案 1 :(得分:7)
here is an online perl validator
如果只检查语法是否干净,可以尝试perl -c filename
。要清理代码格式,您可能需要查看PerlTidy。 。
你可能不需要一个vaidator。你可以自己做点事。
重定向错误消息
默认情况下,错误消息将发送到STDERR。大多数HTTPD服务器将STDERR定向到服务器的错误日志。某些应用程序可能希望保留私有错误日志,与服务器的错误日志不同,或者他们可能希望将错误消息定向到STDOUT,以便浏览器接收它们。
为此目的提供carpout()
功能。由于默认情况下不导出carpout()
,因此您必须通过说
use CGI::Carp qw(carpout);
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);
}
此时 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
FileHandle和其他对象也可以。
在浏览器窗口中出现PERL错误
如果要向浏览器发送致命(死亡,忏悔)错误,请要求导入特殊的“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);
}
答案 2 :(得分:6)
因为perl是一种动态语言,所以很多事情都无法验证;例如,您可以调用编译时不存在的子,因为它可以在运行时创建。静态验证器无法知道呼叫是否正确。
如果您只想知道代码是否编译,请使用perl解释器本身。
如果要检查代码是否符合给定的编码标准,请使用Perl::Critic。
答案 3 :(得分:5)
有很多方法可以解决这个问题。您可以阅读http://perldoc.perl.org/perldebug.html以了解如何使用调试器,这在某些方面类似于Firebug。但是还有很多其他方法可以自动避免问题。
如果您启动代码,会自动捕获许多类常见错误 用严格; 使用警告;
http://perltidy.sourceforge.net/重新格式化您的代码,并且可以轻松捕捉到许多常见错误。