--- 1.pl 2015-03-30 22:58:28.434954333 +0200 +++ 2.pl 2015-03-30 22:58:11.261833250 +0200 @@ -3,16 +3,18 @@ use warnings; use Syntax::Construct qw{ // }; -my ($startpos, $endpos, $count); +my $endpos = 0; +my ($startpos, $count); my %occurrences; while () { - if (/^\s+ ([0-9]+) \s+ ([0-9]+) \s*$/x) { - ($startpos, $endpos) = ($1, $2); + if (/^ +$/) { + $startpos = $endpos + 1; $count = 0; } elsif (/\s+ ([-actg]+) \s*$/x) { ++$count; my @nucleotides = split //, $1; + $endpos = $endpos + length $1 if $startpos == $endpos + 1; for my $pos (0 .. $#nucleotides) { ++$occurrences{ $nucleotides[$pos] }[$startpos + $pos] unless '-' eq $nucleotides[$pos];