next up previous index
Siguiente: Ejemplo de alcance de variables Subir: Subrutinas y paso de parámetros Anterior: Subrutinas y paso de parámetros   Índice de Materias

Declaración de subrutinas y alcance de las variables

Declarar una subrutina en Perl es muy sencillo, es un bloque de código precedido de la palabra reservada sub y un nombre, que, como las variables, debe empezar por un carácter alfanumérico o un '_'.

Puedes declarar subrutinas en cualquier posición de un programa en Perl, pero por cuestión de estilo es costumbre declararlas todas juntas por ejemplo al final del programa principal.

#!/usr/bin/perl -w 
# Ejemplo escrito por Bruno Contreras en Julio de 2005

use strict; 

mi_subrutina();     # invocación de la subrutina: el intérprete busca 
                    # ahora la declaración de mi_subrutina y la encuentra 
                    # más adelante en el mismo archivo; en ese momento
                    # interrumpe la ejecución del programa principal y
                    # ejecuta el código de la subrutina. El programa
                    # principal se reanuda al terminar mi_subrutina 

######## declaraciones de subrutinas ######################################

sub mi_subrutina     
{
	# código propio de la subrutina
	print "mi primera subrutina\n";
}

Si la ejecución de la subrutina requiere el paso de datos externos a la subrutina, normalmente esos datos se pasan como parámetros en el momento de la invocación:

#!/usr/bin/perl -w 
# Ejemplo escrito por Bruno Contreras en Julio de 2005

use strict; 

my ($arg1,$arg2) = (1,2);
my @arg3 = (3,4,5);

mi_subrutina($arg1,$arg2,@arg3);  # paso de tres parámetros

######## declaraciones de subrutinas ######################################

sub mi_subrutina     
{
	my($sarg1,$sarg2,@sarg3) = @_;   # así recibe la subrutina los parámetros pasados, 
	                                 # copiándolos del arreglo global @_ a variables locales
	
	print "subrutina con parámetros\n";
}

El paso de parámetros a una subrutina depende de la variable especial @_, que ya mencionamos en 2.3.4, que es un ejemplo de variable global , a la que se puede acceder desde cualquier lugar de un programa.

A diferencia de @_, las variables que se declaran dentro de una subrutina, como my($sarg1,$sarg2,@sarg3) , son por defecto variables locales, que dejan de existir cuando se termina la ejecución de la subrutina y que no pueden ser accedidas si no es desde la misma subrutina.

Aunque en teoría una subrutina puede acceder a variables globales, declaradas fuera de ella, es conveniente limitar el accesos a aquellas variables que se pasen como parámetros, para facilitar la comprensión del código que escribáis y la corrección de posibles errores.



Subsecciones
next up previous index
Siguiente: Ejemplo de alcance de variables Subir: Subrutinas y paso de parámetros Anterior: Subrutinas y paso de parámetros   Índice de Materias
Bruno Contreras Moreira 2007-06-15