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.