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 en Julio de 2005 use strict; my ($evalue,$identities,$queryseq,$subjectseq); # 100 líneas de código $evalue = 4e-34; $identities = 87; $queryseq = "MARRKRRNFNKQATEILNEYFYSHLSNPYPSXXXXXXXXXXSGITVSQVSNWFGNKRIRYKKNIGKFQEEANIYAAKTAVTA"; $subjectseq = "MARRKRRNFNKQATEILNEYFYSHLSNPYPSEEAKEELAKKSGITVSQVSNWFGNKRIRYKKNIGKFQEEANIYAAKTAVTA"; # programa principal my @blastdata = ($evalue,$identities,$queryseq,$subjectseq); # 100 líneas de código printBLAST(); # 500 líneas de código ######## declaraciones de subrutinas ###################################### sub printBLAST { print "evalue $blastdata[0]\n"; print "alignment:\n$blastdata[2]\n$blastdata[3]\n"; }