[Bioperl-l] perl one-liner with Bio::SeqIO
Chris Fields
cjfields at illinois.edu
Thu Jul 22 14:35:51 EDT 2010
It's fairly easy to check if something is seekable, using tell() (from perldoc -f tell):
tell() on pipes, fifos, and sockets usually returns -1.
My guess is this is something that should be really be handled by Bio::Root::IO, then SeqIO could check this:
if (!$self->seekable) {
#die a horrible death
}
chris
On Jul 22, 2010, at 12:51 PM, Stefan Kirov wrote:
> Sorry for copying you all, but my posts to bioperl list do not go through (my headers seem suspicious).
> I proposed (comment on the bug) that seek throws an IO error, I think this would be good practice in general (device gets disconnected, etc.)
> I agree with Aaron that one option would be that if STDIN is the input format MUST be specified or parser dies.
> Another option is to right to a temp file or slurp into memory. This could be dangerous though...
>
> On 7/22/2010 1:15 PM, Aaron Mackey wrote:
>> You cannot seek on a pipe, unfortunately. SeqIO should probably try to detect this, and die rather than invoking GuessSeqFormat.
>>
>> -Aaron
>>
>> On Thu, Jul 22, 2010 at 10:30 AM, Stefan Kirov <stefan.kirov at bms.com <mailto:stefan.kirov at bms.com>> wrote:
>>
>> From what I see in /bioperl-live/Bio/Tools/GuessSeqFormat.pm
>>
>> if (defined $self->{-file}) {
>> # Close the file we opened.
>> close($fh);
>> } elsif (ref $fh eq 'GLOB') {
>> # Try seeking to the start position.
>> >>> seek($fh, $start_pos, 0);
>> } elsif (defined $fh && $fh->can('setpos')) {
>> # Seek to the start position.
>> $fh->setpos($start_pos);
>> }
>> return ($done ? $fmt_string : undef);
>>
>> seek($fh, $start_pos, 0); does not reset as expected- tell $fh
>> after reset is where the second non-null line starts.
>> I am not sure why- all manuals claim this should work?
>> Hope this helps.
>> Stefan
>>
>> On 7/22/2010 9:27 AM, Chris Fields wrote:
>>
>> cat test.fa | perl -MBio::SeqIO -e 'my $seq=Bio::SeqIO->new(-fh
>> >>> =>\*STDIN); while ($myseq=$seq->next_seq){ print
>> >>> $myseq->id,"\t",$myseq->seq,"\n"}
>>
>>
>>
>> _______________________________________________
>> Bioperl-l mailing list
>> Bioperl-l at lists.open-bio.org <mailto:Bioperl-l at lists.open-bio.org>
>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>
>>
>
> <stefan_kirov.vcf>
More information about the Bioperl-l
mailing list