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

use*_*107 49 perl compilation

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

在Bash脚本的开头我想要一个测试,它检查所有Perl脚本是否没有任何编译错误.

实现此目的的一种方法是实际调用Bash脚本中的Perl脚本以及grep管道日志文件中的"编译错误",但由于在代码中的不同点调用不同的Perl脚本,这会变得混乱,所以我想要在Bash脚本的最开始执行此操作.

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

Cha*_*hak 69

谨防!!

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

$ perl -c yourperlprogram
Run Code Online (Sandbox Code Playgroud)

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

引用他的文章:

可能我们能说的最简单的事情是"它有效吗?".为此,我们调用perl本身,传递仅编译开关:

perl -c ourprogram
Run Code Online (Sandbox Code Playgroud)

对于此操作,perl编译程序,但在执行阶段之前停止.这意味着程序文本的每个部分都被转换为代表工作程序的内部数据结构,但我们实际上并没有执行任何代码.如果有任何语法错误,我们会收到通知,编译将中止.

实际上,这有点谎言.由于BEGIN块(包括它们的分层表兄,use指令),在理论上安全的"语法检查"期间可能已经执行了一些Perl代码.例如,如果您的代码包含:

BEGIN { warn "Hello, world!\n" } 
Run Code Online (Sandbox Code Playgroud)

然后你会看到那条消息,即使在perl -c期间!对于那些认为"仅编译"意味着"不执行代码"的人来说,这有点令人惊讶.考虑包含以下内容的代码:

BEGIN { system "rm", "-rf", "/" } 
Run Code Online (Sandbox Code Playgroud)

你会看到这个论点的问题.哎呀.


小智 5

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

perl -w program.pl
Run Code Online (Sandbox Code Playgroud)

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

  • 注意,`perl -w program.pl`实际上会运行代码。用于`perl -cw program.pl`来检查编译错误以及其他警告。 (2认同)