The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Bio::SeqIO - Handler for SeqIO Formats

SYNOPSIS

    use Bio::SeqIO;

    $in  = Bio::SeqIO->new(-file => "inputfilename" , -format => 'Fasta');
    $out = Bio::SeqIO->new(-file => ">outputfilename" , -format => 'EMBL');

    while $seq ( $in->next_seq() ) {
        $out->write_seq($out);
    }

or

    use Bio::SeqIO;

    $in  = Bio::SeqIO->new(-file => "inputfilename" , -format => 'Fasta');
    $out = Bio::SeqIO->new(-file => ">outputfilename" , -format => 'EMBL');

    tie INPUT, 'Bio::SeqIO::Handler', $in;
    tie OUTPUT, 'Bio::SeqIO::Handler', $out;

    while $seq ( <INPUT> ) {
        print OUTPUT $seq;
    }

DESCRIPTION

Bio::SeqIO is a handler module for the formats in the SeqIO set (eg, Bio::SeqIO::Fasta). It is the officially sanctioned way of getting at the format objects, which most people should use.

The SeqIO system replaces the old parse_XXX functions in the Seq object.

The idea is that you request a stream object for a particular format. All the stream objects have a notion of an internal file that is read from or written to (the same object handles both input and output). A physical example of a stream object is the Bio::SeqIO::Fasta object.

Each stream object has functions

   $stream->next_seq();

and

   $stream->write_seq($seq);

also

   $stream->type() # returns 'INPUT' or 'OUTPUT'

As an added bonus, any stream object can be tied to the SeqIO handler, so that you can use it as if it were a perl style file handle, except rather than producing (or writing) lines it produces (or writes) string objects. So - you can do this

    use Bio::SeqIO;

    $stream = Bio::SeqIO->new(-file => $filename , -format => 'Fasta');
    tie *SEQ, 'Bio::SeqIO::Handler' , $stream;

    while $seq ( <SEQ> ) {
        # do something with $seq
    }

and

    print SEQ $seq; # when stream is in output mode

This makes the simplest ever reformatter

    #!/usr/local/bin/perl

    $format1 = shift;
    $format2 = shift || die "Usage: reformat format1 format2 < input > output";

    use Bio::SeqIO;

    $in  = Bio::SeqIO->new(-fh => \*STDIN , -format => $format1 );
    $out = Bio::SeqIO->new(-fh => \*STDOUT , -format => $format2 );

    tie INPUT, 'Bio::SeqIO::Handler', $in;
    tie OUTPUT, 'Bio::SeqIO::Handler', $out;

    while $seq ( <INPUT> ) {
        print OUTPUT $seq;
    }

Notice that the reformatter will only convert information that is held in the Seq object, which at the moment is only the sequence and the id. More information will be converted through the expanded or larger object which the bioperl developers are talking about.

It is not good for reformatting genbank to embl therefore, but was never designed for this task anyway.

FEEDBACK

Mailing Lists

User feedback is an integral part of the evolution of this and other Bioperl modules. Send your comments and suggestions preferably to one of the Bioperl mailing lists. Your participation is much appreciated.

  vsns-bcd-perl@lists.uni-bielefeld.de          - General discussion
  vsns-bcd-perl-guts@lists.uni-bielefeld.de     - Technically-oriented discussion
  http://bio.perl.org/MailList.html             - About the mailing lists

Reporting Bugs

Report bugs to the Bioperl bug tracking system to help us keep track the bugs and their resolution. Bug reports can be submitted via email or the web:

  bioperl-bugs@bio.perl.org
  http://bio.perl.org/bioperl-bugs/

AUTHOR - Ewan Birney

Email birney@sanger.ac.uk

Describe contact details here

APPENDIX

The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _

new

 Title   : new
 Usage   : $stream = Bio::SeqIO->new(-file => $filename, -format => 'Format')
 Function: Returns a new seqstream
 Returns : A Bio::SeqIO::Handler initialsed with the appropiate format
 Args    : -file => $filename 
           -format => format
           -fh => filehandle to attach to
           

_load_format_module

 Title   : _load_format_module
 Usage   : *INTERNAL SeqIO stuff*
 Function: Loads up (like use) a module at run time on demand
 Example :
 Returns : 
 Args    :