perl语法检查而不加载c库

Sla*_*mac 2 c perl syntax-checking dynamic libraries

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

如果我做:

perl -c path_to_module
Run Code Online (Sandbox Code Playgroud)

我明白了:

Can't locate loadable object for module B::Hooks::OP::Check in @INC
Run Code Online (Sandbox Code Playgroud)

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

ike*_*ami 6

你不能.

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

例如,如果模块导出

sub f() { }
Run Code Online (Sandbox Code Playgroud)

然后

my $f = f+4;
Run Code Online (Sandbox Code Playgroud)

手段

my $f = f() + 4;
Run Code Online (Sandbox Code Playgroud)

但如果是出口的话

sub f { }
Run Code Online (Sandbox Code Playgroud)

相同的代码意味着

my $f = f(+4);
Run Code Online (Sandbox Code Playgroud)

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


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


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

perl -e'use Module;'
Run Code Online (Sandbox Code Playgroud)

使用-c可以在不存在时给出错误,反之亦然.