• Publicidad

Paso de parámetros a subrutina

Perl aplicado a la bioinformática

Paso de parámetros a subrutina

Notapor millen » 2011-11-24 06:15 @302

Buenas,

Tengo otra pregunta chorra, ¿cómo le digo a la subrutina que coja @genbank1 y lo meta en @genbank? Es que tengo varios archivos de genbank...

Muchas Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ORGANISMO(@genbank1);
  2.  
  3. sub ORGANISMO {
  4.     my @genbank   = ();
  5.     my $organismo = '';
  6.     for my $linea (@genbank) {
  7.         if ( $linea =~ /^  ORGANISM/ ) {
  8.             $linea =~ s/^\s*ORGANISM\s*//;
  9.             $organismo = $linea;
  10.         }
  11.     }
  12. }
  13.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Publicidad

Re: Paso de parámetros a subrutina

Notapor explorer » 2011-11-24 06:24 @309

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my @genbank   = @_;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La variable especial @_ guarda los argumentos que se le pasan a la subrutina. Cuando pones un array, todos los elementos del array son "desplegados" (como su enviáramos cada elemento por separado). Cada uno se mete en cada posición de @_. Entonces los podemos recoger haciendo una asignación entre arrays.

El problema es cuando tenemos muchos elementos dentro de @genbank1. Quizás lo más eficiente no es pasar todos los elementos de @genbank1, sino solo una referencia a él:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ORGANISMO(\@genbank1);                  # no pasamos el array entero, solo una referencia a él
  2.  
  3. sub ORGANISMO {
  4.     my $genbank_ref = shift;            # el valor de $_[0] contiene la referencia al array
  5.     my $organismo = '';
  6.     for my $linea (@{$genbank_ref}) {   # des-referenciamos
  7.         if ( $linea =~ /^  ORGANISM/ ) {
  8.             $linea =~ s/^\s*ORGANISM\s*//;
  9.             $organismo = $linea;
  10.         }
  11.     }
  12. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
De esta manera, solo pasamos un valor, y no 'n'.
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

Re: Paso de parámetros a subrutina

Notapor millen » 2011-11-24 07:16 @345

Vale, ya lo he hecho, no sé si era como tu decías, pero sale bien. Lo único, tengo una duda.

No lo voy a hacer por ahora, pero si yo tuviera, por ejemplo, 100 archivos de genbank, ¿habría alguna manera automática para meter todos en @allgenbank? Igual me estoy liando mucho, pero bueno... ¡es que Perl mola!

¡Gracias!

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @allgenbank = ( @genbank1, @genbank2, @genbank3 );
  2.  
  3. ORGANISMO( \@allgenbank );
  4.  
  5. sub ORGANISMO {
  6.     my $genbank   = shift;
  7.     my $organismo = '';
  8.     for my $linea ( @{$genbank} ) {
  9.         if ( $linea =~ /^  ORGANISM/ ) {
  10.             $linea =~ s/^\s*ORGANISM\s*//;
  11.             $organismo = $linea;
  12.             print $organismo;
  13.         }
  14.     }
  15. }
  16.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2011-11-24 07:33 @356, editado 1 vez en total
Razón: Corregir marcas perl. Formateado de código con perltidy
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Re: Paso de parámetros a subrutina

Notapor explorer » 2011-11-24 07:34 @357

Suponiendo que

* estemos en el directorio donde están los ficheros genbank,
* los ficheros tienen una extensión .gen (por ejemplo),

entonces puedes escribir
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @allgenbankfiles = <*.gen>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con esto, ya tienes los nombres de todos los ficheros. Ahora solo te queda abrirlos y leerlos.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use File::Slurp;
  2.  
  3. for my $file (@allgenbankfiles) {
  4.     my @genbank = read_file($file);
  5.     # ...;
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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


Volver a Bioinformática

¿Quién está conectado?

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

cron