PerlではIO::ScalarArray
、配列の要素をファイルの行のように扱う必要があります。BioPerlには、テキスト行を表す文字列の代わりにオブジェクトBio::SeqIO
を読み書きするファイルハンドルを生成できるがあります。Bio::Seq
この2つを組み合わせて実行したいと思いBio::Seq
ます。そのようなオブジェクトの配列から連続するオブジェクトを読み取るハンドルを取得したいと思います。これを行う方法はありますか?これを行うモジュールを実装するのは簡単でしょうか?
Bio::SeqIO
これが必要な理由は、ハンドルまたはオブジェクトの配列のいずれかを受け入れるサブルーチンを記述できるようにしBio::Seq
たいためです。また、取得した入力の種類に基づいて個別のループを記述したくないためです。おそらく、私自身のIOモジュールを作成するよりも、次の方が良いでしょうか?
sub process_sequences {
my $input = $_[0];
# read either from array of Bio::Seq or from Bio::SeqIO
my $nextseq;
if (ref $input eq 'ARRAY') {
my $pos = 0
$nextseq = sub { return $input->[$pos++] if $pos < @$input}; }
}
else {
$nextseq = sub { $input->getline(); }
}
while (my $seq = $nextseq->()) {
do_cool_stuff_with($seq)
}
}