[Bioperl-l] Re: [Bioperl-guts-l] bioperl commit
Aaron J Mackey
amackey at pcbi.upenn.edu
Thu Jul 15 19:00:53 EDT 2004
On Thu, 15 Jul 2004, Chris Mungall wrote:
> However, the fasta parser sets the input record seperator $/=">\n", so I
> actually have to read in up to but NOT including the next ^\> (or end of
> file). Which means I actually have to switch $/ within the GFF parser!
Hmm, doesn't it switch to "\n>" you mean? Regardless, why should you have
to worry about it? You _pushback, you send off to the next parser; if it
changes what $/ is, then Bio::Root::IO::_readline (or maybe just a
fasta.pm overriden version) could/should be savvy to it (comments from
the gallery?):
Index: IO.pm
===================================================================
RCS file: /home/repository/bioperl/bioperl-live/Bio/Root/IO.pm,v
retrieving revision 1.51
diff -r1.51 IO.pm
420,422c420,422
< Note also that the current implementation does not handle pushed
< back input correctly unless the pushed back input ends with the
< value of $/.
---
> Note also that the current implementation does handle
> pushed back input correctly when the pushed back input
> doesn't end with whatever is the local value of $/.
441a442,455
>
> # If $/ has changed since the push back occurred, we may need to
> # adjust the buffering ...
> if (defined($line) && defined($/) && $line =~ m!$/!) {
> # $/ is defined (not in file-slurp mode); does our current
> # line have too much stuff already?
> if (length($')) {
> $line = "$`$/";
> unshift @{$self->{'_readbuffer'}}, $';
> }
> } elsif (!eof($fh)) {
> # need to read some more ...
> $line .= <$fh>;
> }
> The simple solution is to force everyone to preceed the fasta section with
> a ##FASTA directive - however, the spec says this is optional.
Nah, the simple solution is to fix BioPerl ;)
> Of course, I could just go back to my own 8-line fasta parsing code
> within GFF.pm.....
No, then you'd need to worry about it keeping in sync with SeqIO/fasta.pm,
which is what we're trying to avoid, if possible.
I repeat: thanks for the hard work!
-Aaron
More information about the Bioperl-l
mailing list