• Publicidad

Expresión regular de comparación con letra comodín

Perl aplicado a la bioinformática

Notapor explorer » 2006-05-03 14:10 @632

A ver con esto...
Código: Seleccionar todo
#!/usr/bin/perl -l
use warnings;
use strict;

my %almacen;
my @almacen;
my @bases = qw( A T C G );
my @lista = qw( AN ACGNGTCNACGCGT );

foreach my $secuencia ( @lista ) {
   print "$secuencia<=";
   expande_secuencia( "", $secuencia );
}

sub expande_secuencia {
   # Dada dos partes de la secuencia,
   # La primera no contiene ninguna N.
   # Si la segunda no contiene N, la pintamos.
   # Si sí tiene, divide la segunda en partes, combina y repite.
   my ( $primera, $segunda ) = @_;
   if ( $segunda =~ /N/ ) {
      my ($media, $resto) = split('N',$segunda,2);
      foreach my $base ( @bases ) {
         expande_secuencia( $primera . $media . $base, $resto);
      }
   } else {
      my $secuencia = "$primera$segunda";
      print $secuencia;          # Sacarlo a pantalla
      $almacen{$secuencia} = 1;  # Guardarlo en un hash
      push @almacen, $secuencia; # Guardarlo en un array
   }
}
Salida:
Código: Seleccionar todo
AN<=
AA
AT
AC
AG
ACGNGTCNACGCGT<=
ACGAGTCAACGCGT
ACGAGTCTACGCGT
ACGAGTCCACGCGT
ACGAGTCGACGCGT
ACGTGTCAACGCGT
ACGTGTCTACGCGT
ACGTGTCCACGCGT
ACGTGTCGACGCGT
ACGCGTCAACGCGT
ACGCGTCTACGCGT
ACGCGTCCACGCGT
ACGCGTCGACGCGT
ACGGGTCAACGCGT
ACGGGTCTACGCGT
ACGGGTCCACGCGT
ACGGGTCGACGCGT

Lo que no entiendo es porqué quieres guardarlo como hash. Parece que es un array lo que quieres obtener.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Anterior

Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 23 invitados

cron