perl语法检查而不加载c库

时间:2013-11-19 15:01:56

标签: c perl dynamic libraries syntax-checking

我想检查我的perl模块的语法(以及导入),但我不想检查动态加载的c库。

如果我这样做:

perl -c path_to_module

我明白了:

Can't locate loadable object for module B::Hooks::OP::Check in @INC

因为B :: Hooks :: OP :: Check正在加载一些动态c库而我不想检查...

2 个答案:

答案 0 :(得分:6)

你不能。

模块可以以多种方式影响使用它们的脚本,包括如何解析它们。

例如,如果模块导出

sub f() { }

然后

my $f = f+4;

装置

my $f = f() + 4;

但如果要导出

sub f { }

相同的代码意味着

my $f = f(+4);

因此,必须加载模块来解析加载它的脚本。加载模块只需执行它,无论是用Perl还是C编写。


也就是说,有些人把PPI放在一起,以满足像你这样的人的需求。它并不完美 - 由于前面所述的原因,它不能完美 - 但它仍将提供有用的结果。


顺便说一下,语法检查模块的正确方法是

perl -e'use Module;'

使用-c可以在不存在的情况下给出错误,反之亦然。

答案 1 :(得分:2)

语法检查器加载包含的库,因为它们可能正在对语法应用更改。如果您确定没有发生这种情况,可以通过操纵加载路径并提供假b::Hooks::OP::Check来阻止包含。