В Perl у нас есть IO::ScalarArray
для обработки элементов массива подобно строкам файла. В BioPerl у нас есть Bio::SeqIO
, который может создать файловый дескриптор, который читает и записывает объекты Bio::Seq
вместо строк, представляющих строки текста. Я хотел бы сделать комбинацию из двух: я хотел бы получить дескриптор, который читает последовательные Bio::Seq
объекты из массива таких объектов. Есть какой-либо способ сделать это? Было бы тривиально для меня реализовать модуль, который делает это?
Моя причина для этого заключается в том, что я хотел бы иметь возможность написать подпрограмму, которая принимает либо дескриптор Bio::SeqIO
, либо массив объектов Bio::Seq
, и я бы хотел избежать написания отдельных циклов на основе того, что вид ввода я получаю. Возможно, следующее будет лучше, чем написать мой собственный модуль ввода-вывода?
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)
}
}