Проблемы с eval и использованием - PullRequest
2 голосов
/ 29 ноября 2011

Я написал этот код, и он работает, когда в системе установлен модуль POE.

#!/usr/bin/perl

use strict;
use warnings;
use POE;

...

Но я хочу определить, существует ли этот модуль::

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.

Я пробовал другие модули, а также были ошибки.Как я могу делать то, что я хочу, используя строгий режим?

1 Ответ

8 голосов
/ 29 ноября 2011

Проблема в том, что eval запускается после времени компиляции, но ваши константы KERNEL и HEAP проверяются во время компиляции.Поэтому вам нужно поместить свой eval в блок BEGIN:

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

Хотя это в основном бесполезное упражнение, потому что стандартный use POE; также умрет с полезной ошибкой, если не сможет загрузитьмодуль, который вы запросили.

...