В чем разница между двумя способами динамической загрузки модуля? - PullRequest
0 голосов
/ 25 июля 2011
=any
            eval qq(
                use $$category_r[0];
                );
            die $? if $?;
=cut
            require "$$category_r[0].pm";

Теперь у меня работает только require, я не знаю, почему 1-й не работает должным образом ...

Даже это не работает:

my $pkg = "A";
eval {
    use $pkg;
    };

Ответы [ 2 ]

5 голосов
/ 25 июля 2011

Попробуйте Module :: Load , если вы хотите загружать модули на лету.

Работает как с именами файлов, так и с модулями.Это безопаснее, чем

my $module = "strict; warn 'PWNED'";
eval "use $module"; 

Также, как указывает @daxim, это объясняет, что происходит.

2 голосов
/ 25 июля 2011

Вы должны проверять $@, а не $?. Это настоящий код, который не работает? Предположительно, вы не заключили его в стручок по-настоящему.

Для использования $$category_r[0] должно быть что-то вроде Module::Name, в то время как ваше требование ожидает Module/Name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...