GenOO

 view release on metacpan or  search on metacpan

lib/GenOO/Data/File/FASTQ.pm  view on Meta::CPAN

# POD documentation - main docs before the code

=head1 NAME

GenOO::Data::File::FASTQ - Object implementing methods for accessing fastq formatted files

=head1 SYNOPSIS

    # Object that manages a fastq file.

    # To initialize
    my $file = GenOO::Data::File::FASTQ->new(
        file            => undef,
    );

=head1 DESCRIPTION

    This object offers methods to read a fastq file entry by entry

=head1 EXAMPLES

    # Read one entry
    my $entry = $fastq_parser->next_record();

=cut

# Let the code begin...

package GenOO::Data::File::FASTQ;
$GenOO::Data::File::FASTQ::VERSION = '1.5.2';

#######################################################################
#######################   Load External modules   #####################
#######################################################################
use Modern::Perl;
use autodie;
use Moose;
use namespace::autoclean;


#######################################################################
#########################   Load GenOO modules   ######################
#######################################################################
use GenOO::Data::File::FASTQ::Record;


#######################################################################
#######################   Interface attributes   ######################
#######################################################################
has 'file'  => (
	isa      => 'Maybe[Str]',
	is       => 'rw',
	required => 1
);

has 'records_read_count' => (
	traits  => ['Counter'],
	is      => 'ro',
	isa     => 'Num',
	default => 0,
	handles => {
		_inc_records_read_count   => 'inc',
		_reset_records_read_count => 'reset',
	},
);


#######################################################################
########################   Private attributes   #######################
#######################################################################
has '_filehandle' => (
	is        => 'ro',
	builder   => '_open_filehandle',
	init_arg  => undef,
	lazy      => 1,
);


#######################################################################
########################   Interface Methods   ########################
#######################################################################
sub next_record {
	my ($self) = @_;

	my $filehandle = $self->_filehandle;
	while (my $line = $filehandle->getline) {
		if ($line =~ /^\@/) {
			my $id = substr($line,1); 
			chomp($id); 
			$id =~ s/\r//g;
			my $seq = $filehandle->getline;
			chomp($seq); 
			$seq =~ s/\r//g;
			$filehandle->getline; #unused line
			my $quality = $filehandle->getline;



( run in 1.522 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )