我编写了这段代码,它在系统中安装POE模块时有效。
#!/usr/bin/perl
use strict;
use warnings;
use POE;
...
但我想确定这个模块是否存在:
#!/usr/bin/perl
use strict;
use warnings;
eval("use POE; 1") or die ('Please, install POE module. \n');
...
然后它返回:
Bareword "KERNEL" not allowed while "strict subs" in use at ./terminalhero.perl line 58.
Bareword "HEAP" not allowed while "strict subs" in use at ./terminalhero.perl line 60.
Execution of ./terminalhero.perl aborted due to compilation errors.
我尝试了其他模块,也有错误。如何使用严格模式做我想做的事?
答案 0 :(得分:8)
问题是eval在编译时运行,但是在编译时检查了KERNEL
和HEAP
常量。所以你需要将你的eval放在BEGIN块中:
BEGIN {
eval "use POE;";
die "Unable to load POE: $@\n" if $@;
}
虽然这主要是徒劳无功,但如果无法加载您所请求的模块,标准use POE;
也会因有用的错误而死亡。