如何检查Perl脚本是否没有任何编译错误?
我在我的Bash脚本中调用了很多Perl脚本(有时也来自csh)。
在Bash脚本的开始处,我想把一个testing,检查所有的Perl脚本是否没有任何编译错误。
这样做的一个方法是从Bash脚本实际调用Perl脚本,并且在pipe道日志文件中grep
“编译错误”,但是由于不同的Perl脚本在代码中的不同位置被调用,所以这变得很麻烦,所以我想在Bash脚本的开头就做到这一点。
有没有办法来检查Perl脚本是否没有编译错误?
谨防!!
使用下面的命令检查Perl程序中的编译错误可能是危险的。
$ perl -c yourperlprogram
Randal写了一篇关于这个话题的非常好的文章,你应该看看
- 理智的检查你的Perl代码 (Linux Magazine Column 91,2007年3月)
引用他的文章:
可能最简单的事情就是“有效吗?”。 为此,我们调用perl本身,传递只编译开关:
perl -c ourprogram
对于这个操作,perl编译程序,但是停止执行阶段。 这意味着程序文本的每个部分都被转换成表示工作程序的内部数据结构,但是我们并没有实际执行任何代码。 如果有任何语法错误,我们会通知您,编译会中止。
事实上,这是一个谎言。 由于BEGIN块(包括他们的表兄弟,使用指令),在这个理论上安全的“语法检查”期间可能已经执行了一些Perl代码。 例如,如果你的代码包含:
BEGIN { warn "Hello, world!\n" }
那么即使在perl -c期间你也会看到这个消息! 对于那些认为“仅编译”意味着“不执行代码”的人来说,这有点令人惊讶。 考虑包含以下内容的代码:
BEGIN { system "rm", "-rf", "/" }
你会看到这个论点的问题。 哎呀。
除了perl -c program.pl
,最好还是使用命令find警告:
perl -w program.pl
有关详细信息,请参阅: http : //www.perl.com/pub/2004/08/09/commandline.html
当你需要在运行前检查错误/警告,但你的文件取决于多个其他文件,你可以添加选项-I :
perl -I /path/to/dependency/lib -c /path/to/file/to/check
编辑 :从人perlrun
由-I指定的目录被预置为模块的searchpath(@INC)。