2013-10-24 1 views
0

Я пытаюсь подключиться к Ensembl API, используя следующий Perl кода:Perl API Error: Bareword «SQL_INTEGER» не допускается в то время как «строгие подлодки» в использовании

#!/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() 
     ); 
    } 

Bioperl и CPAN оба должны использовать API Ensembl, и я уверен, что они правильно установлены на моем 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 
+0

Возможно, какая-то константа не была импортирована? –

+0

Проблема в коде, который вы не указали. – hobbs

+0

У меня нет ошибок. Вероятно, это ошибка установки. Скорее, старая версия DBI. Каков вывод 'perl -MDBI -le'print $ DBI :: VERSION '; perl -Mstrict -MDBI =: sql_types -le'print STDOUT SQL_INTEGER'' – ikegami

ответ

0

ли файл/дома/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», не так ли?

+0

Я переустановил DBI. Теперь я получаю другую ошибку: «Ошибка DBD :: mysql не удалось: не удается найти метод объекта« драйвер »через пакет« DBD :: mysql »на странице /usr/local/lib/perl/5.14.2/DBI.pm 819 " – user2639056

+0

Установлен ли DBD :: mysql? – runrig