Sha256: 76e0fe3fc28796db8fd5187a04ff6b8a6080f7e5785e79e2c9bdb9226eb64eeb
Contents?: true
Size: 842 Bytes
Versions: 73
Compression:
Stored size: 842 Bytes
Contents
package NucleotideCount; use strict; use warnings; use Carp 'croak'; our @_NUCLEOTIDES = qw(G C A T); our $_VALIDATION = qr/^[@_NUCLEOTIDES]*$/; sub new { my ($class, $sequence) = @_; croak 'Invalid DNA sequence' unless $sequence =~ $_VALIDATION; bless { sequence => $sequence }, $class; } sub count { my ($self, $nucleotide) = @_; croak 'Invalid nucleotide' unless $nucleotide =~ $_VALIDATION and length $nucleotide == 1; unless (exists $self->{$nucleotide}) { # there is probably a cleaner way to do this my @matches = ($self->{sequence} =~ /$nucleotide/g); $self->{$nucleotide} = @matches; } $self->{$nucleotide} ||= $self->{sequence} =~ tr/$nucleotide//d; } sub nucleotide_counts { my ($self) = @_; my $counts = {}; $counts->{$_} = $self->count($_) for @_NUCLEOTIDES; return $counts; } 1;
Version data entries
73 entries across 73 versions & 1 rubygems