Ошибка Perl API: голое слово SQL_INTEGER не разрешено, пока используются строгие подпрограммы

Я пытаюсь подключиться к Ensembl API, используя следующий код Perl:

    #!/bin/perl

    use Bio::EnsEMBL::Registry;
    use DBI qw(:sql_types);


    my $registry = 'Bio::EnsEMBL::Registry';

    $registry->load_registry_from_db(
        -host => 'ensembldb.ensembl.org', # alternatively 'useastdb.ensembl.org'
        -user => 'anonymous'
    );

    my @db_adaptors = @{ $registry->get_all_DBAdaptors() };

    foreach my $db_adaptor (@db_adaptors) {
        my $db_connection = $db_adaptor->dbc();

        printf(
            "species/group\t%s/%s\ndatabase\t%s\nhost:port\t%s:%s\n\n",
            $db_adaptor->species(),   $db_adaptor->group(),
            $db_connection->dbname(), $db_connection->host(),
            $db_connection->port()
        );
    }

Для использования Ensembl API необходимы Bioperl и CPAN, и я почти уверен, что они правильно установлены на моем Ubuntu. Я также добавил необходимые модули в переменную среды PERL5LIB. Несмотря на все это, я получаю следующее сообщение об ошибке:

    Bareword "SQL_INTEGER" not allowed while "strict subs" in use at /home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/BaseAdaptor.pm line 299.
    Compilation failed in require at /home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/BaseFeatureAdaptor.pm line 45.
    BEGIN failed--compilation aborted at /home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/BaseFeatureAdaptor.pm line 45.
    Compilation failed in require at /home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/DBAdaptor.pm line 60.
    BEGIN failed--compilation aborted at /home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/DBAdaptor.pm line 60.
    Compilation failed in require at /home/src/ensembl/modules/Bio/EnsEMBL/Registry.pm line 127.
    BEGIN failed--compilation aborted at /home/src/ensembl/modules/Bio/EnsEMBL/Registry.pm line 127.

Вот файл реестра, который скрипт использует для подключения к базам данных Ensembl:

    Bio::EnsEMBL::Registry->load_registry_from_db(
        -host    => 'ensembldb.ensembl.org',
        -user    => 'anonymous',
        -verbose => '1'
    );

    use strict;
    use Bio::EnsEMBL::Utils::ConfigRegistry;
    use Bio::EnsEMBL::DBSQL::DBAdaptor;


    new Bio::EnsEMBL::DBSQL::DBAdaptor(
        -host    => 'ensembldb.ensembl.org',
        -user    => 'anonymous',
        -port    => '3306',
        -species => 'homo_sapiens',
        -group   => 'core',
        -dbname  => 'homo_sapiens_core_70_37'
    );

    my @aliases = ( 'H_Sapiens', 'Homo sapiens', 'human' );

    Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
        -species => 'homo_sapiens',
        -alias   => \@aliases
    );
    1

person user2639056    schedule 24.10.2013    source источник
comment
возможно какая-то константа не была импортирована?   -  person mpapec    schedule 24.10.2013
comment
Проблема в коде, который вы не показали.   -  person hobbs    schedule 24.10.2013
comment
Я не получаю ошибок. Вряд ли это ошибка установки. Скорее всего старая версия DBI. Каков результат perl -MDBI -le'print $DBI::VERSION' ; perl -Mstrict -MDBI=:sql_types -le'print STDOUT SQL_INTEGER'   -  person ikegami    schedule 24.10.2013
comment
Команда perl -MDBI -le'print $DBI::VERSION' ничего не печатает. И вторая команда печатает Bareword SQL_INTEGER не разрешено, пока используются строгие подпрограммы в -e строке 1. Выполнение -e прервано из-за ошибок компиляции.   -  person user2639056    schedule 24.10.2013
comment
хм? неужели он ничего не печатает?! Модули должны иметь версию, чтобы быть на CPAN. use DBI; загружает не DBI, а это означает, что в вашей системе DBI.pm мусор.   -  person ikegami    schedule 24.10.2013


Ответы (1)


Есть ли в файле /home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/BaseAdaptor.pm строка use DBI qw(:sql_types); перед строкой 299? Нет? Возможно, у вас есть старая версия Bio::EnsEMBL::DBSQL::BaseAdaptor.

Возможно, ваш DBI не такой, каким должен быть. Что perldoc -l DBI говорит о местонахождении DBI? Это правильно? Как вы установили DBI? Вы не просто скопировали файлы ".pm", не так ли?

person runrig    schedule 24.10.2013
comment
Я переустановил DBI. Теперь я получаю другую ошибку: Ошибка инициализации DBD::mysql: не удается найти драйвер метода объекта через пакет DBD::mysql в /usr/local/lib/perl/5.14.2/DBI.pm, строка 819. - person user2639056; 25.10.2013
comment
DBD::mysql установлен? - person runrig; 25.10.2013