我在我的Bash脚本中调用了许多Perl脚本(有时也来自csh)。如何检查Perl脚本是否没有编译错误?
在Bash脚本的开始部分,我想放一个测试,检查所有的Perl脚本是否没有任何编译错误。
这样做的一种方法是实际调用Bash脚本中的Perl脚本和grep
以获得管道日志文件中的“编译错误”,但这会变得混乱,因为在代码中的不同点上调用不同的Perl脚本,所以我想在Bash脚本的开头就这样做。
有没有办法检查Perl脚本是否没有编译错误?
我在我的Bash脚本中调用了许多Perl脚本(有时也来自csh)。如何检查Perl脚本是否没有编译错误?
在Bash脚本的开始部分,我想放一个测试,检查所有的Perl脚本是否没有任何编译错误。
这样做的一种方法是实际调用Bash脚本中的Perl脚本和grep
以获得管道日志文件中的“编译错误”,但这会变得混乱,因为在代码中的不同点上调用不同的Perl脚本,所以我想在Bash脚本的开头就这样做。
有没有办法检查Perl脚本是否没有编译错误?
当心!!
使用下面的命令检查Perl程序中的编译错误可能是危险的。
$ perl -c yourperlprogram
兰德尔写关于这个主题非常好文章,你应该看看
从他的文章引用:
也许si我们可以说最简单的事情是“它有效吗?”。对于这一点,我们 调用Perl本身,通过唯一的编译开关:
perl -c ourprogram
对于此操作,perl的编译程序, 但停止只是短暂的执行阶段。这意味着程序文本的每个 部分都被翻译成代表工作程序的内部数据结构 ,但我们并没有实际执行 任何代码。如果有任何语法错误,我们会通知您,编译将中止。
其实,这是一个谎言。由于BEGIN块(包括 它们的分层表示,使用指令),在理论上安全的“语法检查”期间,某些Perl代码可能会执行 。对于 例如,如果你的代码包含:
BEGIN { warn "Hello, world!\n" }
然后你会看到,即使是在Perl的-c 该消息!这对于那些认为“仅编译”意味着“不执行代码”的人来说有些令人惊讶。考虑 代码包含:
BEGIN { system "rm", "-rf", "/" }
,你会看到的问题 这样的说法。哎呀。
除了perl -c program.pl
,这也是更好地使用命令查找警告:
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指定
目录前加上用于模块(@INC)的搜索路径。
感谢您了解该方法的局限性。顺便说一句,我应该如何管perl -c输出? 'perl -c script.pl | grep“语法OK”'不能按预期工作。我希望它在包含编译错误时不会返回任何内容。 – user13107
没关系,明白了! 'perl -c script.pl |&grep“语法OK”' – user13107
最好检查一下实际的退出值,而不是grep的某些字符串输出。如果成功,退出值将为0,如果失败,则退出值为非零。 –