2

我想检查我的 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 库,我不想检查...

4

2 回答 2

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可以在不存在的地方给出错误,反之亦然。

于 2013-11-19T15:19:17.270 回答
2

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

于 2013-11-19T15:07:14.813 回答