如何检查Perl脚本是否没有任何编译错误?

时间:2012-10-16 05:59:55

标签: perl compilation

我在Bash脚本中调用了许多Perl脚本(有时也来自csh)。

在Bash脚本开始时,我想进行一个测试,检查所有Perl脚本是否没有任何编译错误。

这样做的一种方法是实际调用Bash脚本中的Perl脚本,并在管道日志文件中调用grep中的“编译错误”,但由于在不同点调用不同的Perl脚本,这会变得很乱在代码中,所以我想在Bash脚本的最开始执行此操作。

有没有办法检查Perl脚本是否没有编译错误?

4 个答案:

答案 0 :(得分:65)

<强>当心!!

使用以下命令检查Perl程序中的编译错误可能很危险。

$ perl -c yourperlprogram

兰德尔写了一篇关于这个主题的非常好的文章,你应该看看

引用他的文章:

  

我们可以说的最简单的事情是“它有效吗?”。为了这,   我们调用perl本身,传递仅编译开关:

perl -c ourprogram
     

对于此操作,perl编译程序,   但只是在执行阶段之前停止。这意味着每一个   程序文本的一部分被翻译成内部数据   代表工作计划的结构,但我们实际上并没有   执行任何代码。如果有任何语法错误,我们会被告知,并且   汇编中止。

     

实际上,这有点谎言。感谢BEGIN块(包括   他们的分层表兄,使用指令),一些Perl代码可能有   在这个理论上安全的“语法检查”期间执行。对于   例如,如果您的代码包含:

BEGIN { warn "Hello, world!\n" } 
     

然后你会看到那条消息,   甚至在perl -c期间!对于那些人来说,这有点令人惊讶   将“仅编译”视为“不执行代码”。考虑一下   代码包含:

BEGIN { system "rm", "-rf", "/" } 
     

你会看到问题所在   那个论点。糟糕。

答案 1 :(得分:5)

除了perl -c program.pl之外,最好使用以下命令查找警告:

perl -w program.pl

有关详细信息,请参阅:http://www.perl.com/pub/2004/08/09/commandline.html

答案 2 :(得分:0)

我使用以下part bash函数来处理更大的perl项目:

npm install

答案 3 :(得分:-1)

如果您需要在运行前检查错误/警告,但您的文件依赖于mutliple其他文件,您可以添加选项 -I

perl -I /path/to/dependency/lib -c /path/to/file/to/check

修改:来自 man perlrun

  

-I指定的目录前置于模块的搜索路径(@INC)。