package FASTA::File; use strict; use warnings; use Carp; use base qw(Sequence::File); use FASTA; sub old_read { my ( $self, $fh ) = @_; my ( $id, $seq, @seqs ); while (<$fh>) { chomp; next if /^\s+$/; if (s/^>//) { push @seqs, [ $id, $seq ] if $id and $seq; $seq = undef; $id = $_; } else { $seq .= $_; } } push @seqs, [ $id, $seq ] if $id and $seq; for (@seqs) { my $new = FASTA->new( id => ${$_}[0] ); $new->seq( split //, ${$_}[1] ); $self->add_entries($new); } 1; } sub read { my ( $self, $fh ) = @_; local $/ = "\n>"; while (<$fh>) { s/^>//g; s/>$//g; my ( $id, @data ) = split /\n/, $_; my $entry = FASTA->new( id => $id ); $entry->seq( split //, join( "", @data ) ); $self->add_entries($entry); } 1; } sub write { my ( $self, $fh ) = @_; local $| = 1; for ( $self->get_entries ) { my $id = $_->id; my @seq = $_->seq; my $seq = join '', @seq; $seq =~ s/\s*//g; $seq =~ s/(.{72})/$1\n/g; print $fh ">$id\n$seq\n"; } } 1;