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定数はコンパイル時にチェックされます。したがって、評価を BEGIN ブロック内に配置する必要があります。

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

use POE;要求したモジュールをロードできない場合、標準も有用なエラーで終了するため、これはほとんど無益な演習ですが。

于 2011-11-29T01:00:30.333 に答える