[bcn-pm] Duda con arrays

Verónica Olmos González volmosg.bt a gmail.com
dll feb 2 11:58:46 PST 2015


¡Hola a todos!

Bueno, ante todo, como decía en mi presentación, soy bastante (muy) novata
en Perl, así que es bastante probable que la esté liando con algo muy
básico... pero me gustaría compartir mi problema con vosotros, por si
alguno supiera darme alguna orientación (aunque sea simplemente remitirme a
alguna página concreta de documentación).

El contexto de mi problema es el siguiente: parto de un array que contiene
secuencias de nucleótidos (o sea, strings que deben estar formados por "A",
"C", "G" o "T"). La cosa es que estos strings pueden contener, cualquiera
de ellos, en determinada posición, el carácter "N", que no es "válido". Lo
que hace el resto de mi programa es hacer comparaciones dos a dos entre
cada elemento del array. Lo que quiero hacer, y el quid de mi duda: si en
"x" posición de cualquier elemento encuentro una "N", debo borrar esa
"x-ésima" posición en TODOS los elementos del array. Un ejemplo: si tengo
@arr = ("AATN", "AATG", "TATG") debo quedarme con @arr2 = ("AAT", "AAT",
"TAT").

Sin enrollarme con más explicaciones, os enseño el código con mi
planteamiento:

@sequences = ("AATGTCAACGAN", "AATGTCAACGNA", "ATTGTCAACGTN",
> "ATTGTGATCGTT");
> for ($i = 0; $i <= scalar(@sequences); $i++) {
>     if ($sequences[$i] =~ "N") {
>
      # Localizo las "N" y guardo su posición en un array

        push(@pos,index($sequences[$i], "N"));
    }
}

# Elimino posiciones repetidas y ordeno los valores
my @pos = do { my %seen; grep { !$seen{$_}++ } @pos };
@pos = sort @pos;

# Mi idea era, mediante expresiones regulares, poner "N" en todos los
elementos de los arrays, en las posiciones guardadas, para luego eliminarlo
todo evitando "corrimientos" en las posiciones

for ($i = 0; $i <= scalar(@sequences); $i++) {
    for ($j = 0; $j <= scalar(@pos); $j++) {
        substr($sequences[$i],$pos[$j],1) =~ s/\D/N/;
    }
}

Ahora bien, en el último bucle se me va todo de madre, permanece iterando
continuamente.

La verdad es que seguro que estoy haciendo fatal algo tontísimo, pero no
soy capaz de ver el origen del error, por lo que agradecería enormemente
cualquier tipo de orientación.


Un saludo,
Verónica

-- 
Verónica Olmos González
Skype: v.olmosg
Teléfono/Phone: +34 666 68 16 01
------------ pr�a parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/barcelona-pm/attachments/20150202/fe50cf75/attachment.html>


Més informació sobre la llista de correu Barcelona-pm