2013-10-24 86 views
0

我在嘗試使用下面的Perl代碼連接到ENSEMBL API:Perl的API錯誤:裸詞「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都需要使用Ensembl API,我很確定這些都安裝在我的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

是否文件/ home/src/ensembl/modules/Bio/EnsEMBL/DBSQL/BaseAdaptor.pm在299行之前有use DBI qw(:sql_types);行嗎?沒有?也許你有一個老版本的Bio :: EnsEMBL :: DBSQL :: BaseAdaptor。

也許你的DBI不是它應該是的。 perldoc -l DBI說什麼是DBI的位置?這是對的嗎?你是如何安裝DBI的?你不只是複製「.pm」文件,是嗎?

+0

我重新安裝了DBI。現在我得到一個不同的錯誤:「DBD :: mysql初始化失敗:無法通過/usr/local/lib/perl/5.14.2/DBI.pm行中的包」DBD :: mysql「找到對象方法」驅動程序「行819「 – user2639056

+0

是否安裝了DBD :: mysql? – runrig