#!/usr/bin/perl
use File::Read;
use open 'locale';
my @repeticiones = read_file({ aggregate => 0 }, '2y4ntdb.txt');
my $secuencia = read_file('seq_pba.fasta');
chomp @repeticiones; # no nos interesan
$secuencia =~ s/\n//g; # los finales de línea
for my $repetición (@repeticiones) {
my $apariciones = 0;
my $contiguas = 0;
my @posiciones_contiguas; # basadas en 1
while ($secuencia =~ /($repetición)\1*/pg) { # buscamos conjuntos de secuencias repetidas
my $veces = length(${^MATCH}) # número de veces que se repiten
/ length $repetición # de forma contigua
;
$apariciones += $veces; # sumamos las apariciones totales
if ($veces > 1) { # si han aparecido más de una vez juntas
$contiguas += $veces; # sumamos como apariciones contiguas
push @posiciones_contiguas, [ # guardamos las posiciones
pos($secuencia) - length ${^MATCH}, # inicial y
pos $secuencia # final
]; # de esas secuencias contiguas
}
}
print "$repetición = $apariciones apariciones totales";
if ($contiguas) {
print "; $contiguas contiguas, localizadas entre las posiciones ";
print join q[, ], map { "$_->[0] y $_->[1]" } @posiciones_contiguas;
}
print ".\n";
}
__END__
AA = 7 apariciones totales; 4 contiguas, localizadas entre las posiciones 33 y 41.
AT = 5 apariciones totales.
AG = 6 apariciones totales; 3 contiguas, localizadas entre las posiciones 12 y 18.
AC = 1 apariciones totales.
TA = 3 apariciones totales.
TT = 7 apariciones totales; 2 contiguas, localizadas entre las posiciones 8 y 12.
TC = 4 apariciones totales.
TG = 5 apariciones totales; 2 contiguas, localizadas entre las posiciones 68 y 72.
GA = 4 apariciones totales; 2 contiguas, localizadas entre las posiciones 13 y 17.
GT = 5 apariciones totales.
GG = 6 apariciones totales; 2 contiguas, localizadas entre las posiciones 57 y 61.
GC = 4 apariciones totales.
CA = 4 apariciones totales.
CT = 3 apariciones totales.
CG = 2 apariciones totales.
CC = 1 apariciones totales.
AAAA = 2 apariciones totales; 2 contiguas, localizadas entre las posiciones 33 y 41.
AAAT = 1 apariciones totales.
AAAC = 0 apariciones totales.
AAAG = 0 apariciones totales.
TTTA = 2 apariciones totales.
TTTT = 1 apariciones totales.
TTTC = 0 apariciones totales.
TTTG = 0 apariciones totales.