2012-11-20 54 views

回答

4

我首先想到的是perldoc perldebug

我认为这是最好的地方开始。

我的第二个是:始终把

use strict; 
use warnings; 

你的脚本的顶部,你可以把

use diagnostics; 

也为生产出更详细的警告诊断


打开潘多拉盒子之前,请利用Perl模块Data::Dumper

这是显示所有(嵌套)数据结构和对象,看(我用perlconsole,这是很好的尝试一些技巧)有用:

$ perlconsole 
Perl Console 0.4 
Perl> my $ref = { foo => 'bar', arr => [ 1, 2, 3, [ qw/a z e r t y/ ] ] } 
HASH(0x1fc25a8) 

Perl> use Data::Dumper; 
Perl> print Dumper $ref; 
$VAR1 = { 
      'foo' => 'bar', 
      'arr' => [ 
        1, 
        2, 
        3, 
        [ 
         'a', 
         'z', 
         'e', 
         'r', 
         't', 
         'y' 
        ] 
        ] 
     }; 
1 

Perl> 

你会看到,Perl可以运行脚本与

perl -d -e 42 script.pl 

帮助调试器说:

$ perl --help | grep -- '-d' 
    -d[:debugger]  run program under debugger 

可以 “追踪” 这太有:

perl -d:Trace script.pl 

有一个调试过,它带有Devel::ptkdb模块,例如:

perl -d:ptkdb script.pl 

ptkdb


尝试

perlcritic 

同样,命令行界面批判Perl源代码。


剖析你的代码也可以,看

http://metacpan.org/pod/Devel::NYTProf

http://blog.timbunce.org/2008/07/15/nytprof-v2-a-major-advance-in-perl-profilers/

debug

3
perl -c <your program> 

...会给你在Perl脚本中的任何语法错误,包括具体的错误讯息你可以在互联网上查找的ges。

另外,给自己一个机会,通过放置: -

use strict; 

在每一个你的Perl文件的顶部。没有它,Perl会自动生成你错误输入的变量。有了它,任何未声明的变量都会被视为语法错误。

+2

使用术语“autovivify变量”,你所做的方式并不完全准确。自动生成功能仍然可以通过'strict strict'来实现,例如:'my $ var; $ var - > {foo} - > {bar} ='这个hash-in-hash已经被自动生成了。 print $ var - > {foo} - > {bar},“\ n”;' –

+0

你认为他在做匿名哈希吗? :) –

+2

不是。只是尽量不要将他混淆。好的,也许我的评论并没有实现这个目标......;) –