2

我编写了这段代码,当系统中安装了 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.

我尝试了其他模块,也有错误。如何使用严格模式做我想做的事?

4

1 回答 1

8

问题是 eval 在编译时间之后运行,但是在编译时间检查你的KERNELHEAP常量。因此,您需要将 eval 放在 BEGIN 块中:

BEGIN {
    eval "use POE;";
    die "Unable to load POE: $@\n" if $@;
}

尽管这主要是徒劳的,因为如果标准use POE;无法加载您请求的模块,它也会因有用的错误而死。

于 2011-11-29T01:00:30.333 回答