A parte de
@_
,
las subrutinas pueden acceder a otras variables globales. Para probar
esto os pido que ejecutéis este programita, observéis la salida y luego lo modifiquéis para
demostrar que la subrutina puede hacer exactamente los mismos cálculos recibiendo como
parámetros los datos necesarios. ¿No os parece que se hace más fácil comprender el
funcionamiento de
printBLAST
en la versión modificada, ya que no hay que buscar en el
código de donde vienen las variables utilizadas?
#!/usr/bin/perl -w # Ejemplo escrito por Bruno Contreras use strict; my ($evalue,$identities,$queryseq,$subjectseq); $evalue = 4e-34; $identities = 87; $queryseq = "MARRKRRNFNKQATEILNEYFYSHLSNPYPSXXXXXXXXXXSGITVSQVSNWFGNKRIRYKKNIGKFQEEANIYAAKTAVTA"; $subjectseq = "MARRKRRNFNKQATEILNEYFYSHLSNPYPSEEAKEELAKKSGITVSQVSNWFGNKRIRYKKNIGKFQEEANIYAAKTAVTA"; # programa principal my @blastdata = ($evalue,$identities,$queryseq,$subjectseq); # + codigo printBLAST(); ######## declaraciones de subrutinas ###################################### sub printBLAST { print "evalue $blastdata[0]\n"; print "alignment:\n$blastdata[2]\n$blastdata[3]\n"; }
Bruno Contreras-Moreira