GenOO
view release on metacpan or search on metacpan
lib/GenOO/Data/File/SAM.pm view on Meta::CPAN
# POD documentation - main docs before the code
=head1 NAME
GenOO::Data::File::SAM - Object implementing methods for accessing SAM formatted files
=head1 SYNOPSIS
# Object that manages a sam file.
# To initialize
my $sam_file = GenOO::Data::File::SAM->new(
file => undef,
);
=head1 DESCRIPTION
This object implements methods to read a sam file line by line.
=head1 EXAMPLES
# Create object
my $sam_file = GenOO::Data::File::SAM->new(
file => 't/sample_data/sample.sam.gz'
);
# Read one record at a time
my $sam_record = $sam_file->next_record();
=cut
# Let the code begin...
package GenOO::Data::File::SAM;
$GenOO::Data::File::SAM::VERSION = '1.5.2';
#######################################################################
####################### Load External modules #####################
#######################################################################
use Modern::Perl;
use autodie;
use Moose;
use namespace::autoclean;
#######################################################################
####################### Interface attributes ######################
#######################################################################
has 'file' => (
isa => 'Maybe[Str]', # undef value makes the parser read from STDIN
is => 'ro',
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',
},
);
has 'records_class' => (
is => 'ro',
default => 'GenOO::Data::File::SAM::Record',
);
#######################################################################
######################## Private attributes #######################
#######################################################################
has '_filehandle' => (
is => 'ro',
builder => '_open_filehandle',
init_arg => undef,
lazy => 1,
);
has '_is_eof_reached' => (
traits => ['Bool'],
is => 'rw',
isa => 'Bool',
default => 0,
handles => {
_set_eof_reached => 'set',
_unset_eof_reached => 'unset',
_eof_not_reached => 'not',
},
);
has '_cached_header_lines' => (
traits => ['Array'],
is => 'ro',
default => sub { [] },
handles => {
_all_cached_header_lines => 'elements',
_add_header_line_in_cache => 'push',
_shift_cached_header_line => 'shift',
( run in 0.549 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )