1

BioPerl モジュールを使用して、一連のパラメーターから文字列を取得しています。HOWTO:Beginners ページをフォローしました。モジュールは明らかにハッシュ オブジェクトを返します。ハッシュオブジェクトから実際の文字列を取得するにはどうすればよいですか?

use Bio::DB::GenBank;
use Data::Dumper;

my $gb = Bio::DB::GenBank->new(-format     => 'Fasta',
                             -seq_start  => 1,
                             -seq_stop   => 251,
                             -strand     => 1
                             -complexity => 1);
my $seq = $gb->get_Seq_by_acc('NG_016346');
my $sequence_string = lc($seq->seq());
my $seq_obj = Bio::Seq->new(-seq => $sequence_string,
                          -alphabet => 'dna' );
my $prot_obj = $seq_obj->translate;
print Dumper($prot_obj);

データ ダンパーは次のように出力します。

$VAR1 = bless( {
             'primary_seq' => bless( {
                                       'length' => 83,
                                       '_root_verbose' => 0,
                                       '_nowarnonempty' => undef,
                                       'seq' => 'RLCVKEGPWPAVEGTWSWG*HRPGSRACPRWGAPNSVQATSYTPSPTHAPFSVSPIPIC*MSLLEASCWPGSREDGARMSAGM',
                                       'alphabet' => 'protein'
                                     }, 'Bio::PrimarySeq' ),
             '_root_verbose' => 0
           }, 'Bio::Seq' );

に格納されている「seq」を取得するにはどうすればよい$prot_objですか?

私は試した

print $prot_obj{'primary_seq'}{'seq'};

しかし、何も印刷されません。データ ダンパーは という単語を出力しblessました。おそらくseqオブジェクト指向変数のフィールドです。

4

3 に答える 3

3

オブジェクト プロパティにアクセスするための正しい形式は->次のとおりです。

print $prot_obj->{'primary_seq'}->{'seq'};
于 2015-10-27T20:31:45.447 に答える
1

受け入れられた答えがありますが、そのようなオブジェクトの間隔を突っ込まないようにアドバイスしますref. これが私が問題に取り組む方法です:

use 5.010;
use strict;
use warnings;
use Bio::DB::GenBank;
use Bio::Seq;

my $gb = Bio::DB::GenBank->new(
    -format     => 'Fasta',
    -seq_start  => 1,
    -seq_stop   => 251,
    -strand     => 1,
    -complexity => 1
);

my $seq = $gb->get_Seq_by_acc('NG_016346');
my $seq_obj = Bio::Seq->new(
    -id       => $seq->id,
    -seq      => $seq->seq,
    -alphabet => 'dna' 
);

say join "\n", ">".$seq_obj->id, $seq_obj->translate->seq;

これを実行すると、翻訳された FASTA レコードが得られます。

>gi|283837914:1-251
RLCVKEGPWPAVEGTWSWG*HRPGSRACPRWGAPNSVQATSYTPSPTHAPFSVSPIPIC*MSLLEASCWPGSREDGARMSAGM

BioPerl を使用する本当の利点は、さまざまなクラスを組み合わせて、最小限の (ただし読み取り可能で再利用可能な) コードで問題を解決できることです。また、strict プラグマと warnings プラグマを有効にすると検出される小さなタイプミスがコードにありました (これが私の最善のアドバイスです)。

于 2015-10-28T16:52:53.913 に答える