我想检查我的 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 库,我不想检查...
我想检查我的 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 库,我不想检查...
你不能。
模块可以以多种方式影响使用它们的脚本,包括它们的解析方式。
例如,如果一个模块导出
sub f() { }
然后
my $f = f+4;
方法
my $f = f() + 4;
但是,如果要导出
sub f { }
相同的代码意味着
my $f = f(+4);
因此,必须加载模块来解析加载它的脚本。加载一个模块只是简单地执行它,无论它是用 Perl 还是 C 编写的。
也就是说,有些人将PPI放在一起来满足像您这样的人的需求。它并不完美——由于前面所述的原因,它不可能是完美的——但它仍然会产生有用的结果。
顺便说一句,语法检查模块的正确方法是
perl -e'use Module;'
使用-c
可以在不存在的地方给出错误,反之亦然。
语法检查器会加载包含的库,因为它们可能正在应用对语法的更改。如果您确定这没有发生,您可以通过操纵加载路径并提供假的b::Hooks::OP::Check
.