我在Bash脚本中调用了许多Perl脚本(有时也来自csh)。
在Bash脚本开始时,我想进行一个测试,检查所有Perl脚本是否没有任何编译错误。
这样做的一种方法是实际调用Bash脚本中的Perl脚本,并在管道日志文件中调用grep
中的“编译错误”,但由于在不同点调用不同的Perl脚本,这会变得很乱在代码中,所以我想在Bash脚本的最开始执行此操作。
有没有办法检查Perl脚本是否没有编译错误?
答案 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)。