我想检查我的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库而我不想检查...
答案 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
来阻止包含。