2017-07-02 25 views
2

Ensembl Perl APIを使用すると、SQLサーバーに接続するload_registry_from_db関数があります。接続タイムアウトの例外がスローされることが記載されています。PerlでSQL接続の例外をキャッチ

$registry->load_registry_from_db(
    -host => 'ensembldb.ensembl.org', 
    -user => 'anonymous', 
    -verbose => '1' 
); 

例外:指定されたMySQLデータベースは に接続することができないか、またはデータベースを照会しながら、任意のエラーがある場合、スロー。

私はPerlでどのように例外を捕まえることができますか?それはevalが最もよいことであるページに書かれています。それはeval {$registry}ですか?

答えて

2

あなたは間違いなくevalを使用することができます。

my $statement_ok = eval { 
    $registry->load_registry_from_db(
     -host => 'ensembldb.ensembl.org', 
     -user => 'anonymous', 
     -verbose => '1' 
    ); 
    1; 
}; 

if (! $statement_ok){ 
    # handle error 
    do_something() if [email protected] =~ /.../; 
} 

私はこのようにそれをやって好む理由は何か他のものを持っていることや[email protected]を壊しことができるということですので、真のステートメントを使用すると、たとえ[email protected]が既に何らかの形であることを保証しますそのコードで特定の例外をトラップしたことは間違いありません。

本質的に、コールがスローしない場合、$statement_okが真となります。

Try::Tinyなどの外部ライブラリを使用することもできますが、私はそのようなことは一度もしませんでした。私はいつもevalにつきました。

+0

So ... Perlスクリプトは 'final Process p = pb.start();によってJavaコードから呼び出されます。 int exitCode = p.waitFor(); '。あなたのコードは出口番号をその親に返しますか? – mahmood

+0

いいえ、しかし 'exit -1;'などのようなものを 'if(!$ statement_ok){...}'の中で使うことができます。 – stevieb

+2

* "私はこのようにするのが好きな理由"これが何らかの価値を持つためには、あなたがそれを好むものを*説明する必要があります。 – Borodin