Ejemplo de alcance de variables

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
http://www.eead.csic.es/compbio