Bio::Phylo::Parsers::Phylip - Parser used by Bio::Phylo::IO, no serviceable parts inside


Bio-Phylo documentation Contained in the Bio-Phylo distribution.

Index


Code Index:

NAME

Top

Bio::Phylo::Parsers::Phylip - Parser used by Bio::Phylo::IO, no serviceable parts inside

DESCRIPTION

Top

This module is used for parsing PHYLIP character state matrix files. At present this only works on non-interleaved files. As PHYLIP files don't indicate what data type they are you should indicate this as an argument to the Bio::Phylo::IO::parse function, i.e.:

 use Bio::Phylo::IO 'parse';
 my $file = shift @ARGV;
 my $type = 'dna'; # or rna, protein, restriction, standard, continuous
 my $matrix = parse(
 	'-file'   => $file,
 	'-format' => 'phylip',
 	'-type'   => $type,
 )->[0];
 print ref($matrix); # probably prints Bio::Phylo::Matrices::Matrix;

SEE ALSO

Top

Bio::Phylo::IO

The PHYLIP parser is called by the Bio::Phylo::IO object. Look there for examples.

Bio::Phylo::Manual

Also see the manual: Bio::Phylo::Manual and http://rutgervos.blogspot.com.

CITATION

Top

If you use Bio::Phylo in published research, please cite it:

Rutger A Vos, Jason Caravas, Klaas Hartmann, Mark A Jensen and Chase Miller, 2011. Bio::Phylo - phyloinformatic analysis using Perl. BMC Bioinformatics 12:63. http://dx.doi.org/10.1186/1471-2105-12-63

REVISION

Top

 $Id: Phylip.pm 1660 2011-04-02 18:29:40Z rvos $


Bio-Phylo documentation Contained in the Bio-Phylo distribution.
# $Id: Phylip.pm 1660 2011-04-02 18:29:40Z rvos $
package Bio::Phylo::Parsers::Phylip;
use strict;
use base 'Bio::Phylo::Parsers::Abstract';
use Bio::Phylo::Util::Exceptions 'throw';

sub _parse {
    my $self    = shift;
    my $factory = $self->_factory;
    my $type    = $self->_args->{'-type'} || 'standard';
    my $handle  = $self->_handle;
    my $matrix  = $factory->create_matrix( '-type' => $type );
    my ( $ntax, $nchar );
    while (<$handle>) {
        if ( /^\s*(\d+)\s+(\d+)\s*$/ && !$ntax && !$nchar ) {
            ( $ntax, $nchar ) = ( $1, $2 );
        }
        elsif (/\S/) {
            my $name = substr( $_, 0, 10 );
            my $seq = substr( $_, 10 );
            $matrix->insert(
                $factory->create_datum(
                    '-type' => $type,
                    '-name' => $name,
                    '-char' => $matrix->get_type_object->split($seq),
                )
            );
        }
    }
    my ( $my_nchar, $my_ntax ) = ( $matrix->get_nchar, $matrix->get_ntax );
    $nchar != $my_nchar
      && throw 'BadFormat' => "observed ($my_nchar) != expected ($nchar) nchar";
    $ntax != $my_ntax
      && throw 'BadFormat' => "observed ($my_ntax) != expected ($ntax) ntax";
    return $matrix;
}

# podinherit_insert_token

1;