my %value = (
G => 0,
A => 1,
T => 2,
C => 3,
);
####
$number = $w[$n]*(4**$n) + $w[$n-1]*(4**($n-1)) + ... + $w[0]
####
sub word_to_number {
my (@w) = @_;
my $res = 0;
while (@w) {
$res = $res * 4;
$res += $value{ pop @w };
};
};
####
open my $frequencies, ">+", 'frequencies.bin'
or die "$!";
binmode $frequencies;
...
while (words_are_available()) {
my @word = split //, get_next_word();
my $offset = word_to_number(@word);
seek $frequencies, $offset * 4;
read $frequencies, my $old_count, 4;
$old_count = unpack "N", $old_count;
my $count = $old_count + 1;
seek $requencies, $offset * 4;
write $frequencies, pack "N", $count;
};