One more way to parse the sequence. The initialization statement is only needed if zero-counts must be defined.
use strict;
use warnings;
use Readonly;
use Data::Dumper qw( Dumper );
Readonly::Scalar my $seq => "ATCGGCGCCTAT" ;
my %count;
@count{ qw(A1 A2 A3 T1 T2 T3 C1 C2 C3 G1 G2 G3 ) } = (0) x (3*4);
foreach my $i (0 .. length($seq)-1 ) {
my $pos = $i % 3 + 1;
my $base = substr $seq, $i, 1;
$count{$base.$pos}++;
}
$Data::Dumper::Sortkeys = 1;
print Dumper \%count;
Or if you really want individual scalar counts and do not mind global variables or symbolic references.
use strict;
use warnings;
my $seq = 'ATCGGCGCCTAT' ;
my %count;
our( $A1, $A2, $A3, $T1, $T2, $T3, $C1, $C2, $C3, $G1, $G2, $G3 )
= (0) x 12;
foreach my $i (0 .. length($seq)-1 ) {
my $pos = $i % 3 + 1;
my $base = substr $seq, $i, 1;
{no strict 'refs'; ${$base.$pos}++;}
}
print $A1, $A2, $A3, $T1, $T2, $T3, $C1, $C2, $C3, $G1, $G2, $G3;
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.