Agradecería mucho si por favor alguien puede darme una ayuda:
Using perl Syntax Highlighting
- $seq = "AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG";
- for $r ( 0, 1, 2 ) {
- for ( my $i = $r; $i <= length($seq) - 3; $i += 3 ) {
- if ( substr( $seq, $i, 3 ) eq "ATG" ) {
- my $j = $i + 3;
- while ($j <= length($seq) - 3
- && substr( $seq, $j, 3 ) ne "TAA"
- && substr( $seq, $j, 3 ) ne "TAG"
- && substr( $seq, $j, 3 ) ne "TGA" ) {
- $j += 3;
- }
- if ( $j <= length($seq) - 3 ) {
- my $len = $j + 2 - $i + 1;
- if ( $len >= 30 ) {
- print substr( $seq, $i, $j + 2 - $i + 1 ) . "\n";
- }
- }
- }
- }
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Este primer ejemplo funciona bien, pero al hacerlo con el reverso de la cadena:
Using perl Syntax Highlighting
- $seq = "AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG";
- $rev = reverse $seq;
- for $r ( 0, 1, 2 ) {
- for ( my $i = $r; $i <= length($rev) - 3; $i += 3 ) {
- if ( substr( $rev, $i, 3 ) eq "ATG" ) {
- my $j = $i + 3;
- while (
- $j <= length($rev) - 3
- && substr( $rev, $j, 3 ) ne "TAA"
- && substr( $rev, $j, 3 ) ne "TAG"
- && substr( $rev, $j, 3 ) ne "TGA"
- ) {
- $j += 3;
- }
- if ( $j <= length($rev) - 3 ) {
- my $len = $j + 2 - $i + 1;
- if ( $len >= 30 ) {
- print substr( $rev, $i, $j + 2 - $i + 1 ) . "\n";
- }
- }
- }
- }
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
No comprendo qué pasa con $j+=3 ya que luego if ($j <= length ($rev)-3) no evalúa nada, no hay salida.
Si cambio a if ($j > length ($rev)-3) en cambio sí evalúa y continúa las instrucciones, pero si $j lleva el valor de 12 o 90 que es menor de length ($rev)-3 no entiendo por qué no hay salida. Digo lo de $j+=3 porque hice una prueba con un solo bucle for() (el interior), sin while() y sin asignar $j+=3; y sí continúa evaluando if ($j <= length ($rev)-3) cambiando J por i.
Espero me haya explicado con claridad. De antemano, gracias por si alguien me ayuda, un saludo a todos.