08 octubre 2007

Jugando con Perl (7)

Ahora vamos a ver cómo crear funciones en Perl.


La forma de declararlas es usando la palabra "sub" seguida del nombre:

sub suma { ... }

Los parámetros se leen a través del array "@_", que podemos recorrer de varias formas:
  • Accediendo a cada elemento: el primer parámetro sería @_[0], el segundo @_[1], el tercero @_[2] y así sucesivamente.
  • Usando la orden "foreach", que lee cada valor del array y lo guarda en una variable: foreach (&variable) (@array)
  • Usando la orden "shift" para acceder al primer valor y "desplazar" los demás valores, de modo que el que antes era el segundo pase a ser el nuevo primero.

Las variables locales se preceden con "my":

my $valorTemporal = 0;


Si queremos devolver un valor se usa "return".


En la forma "clásica" de declarar la función, no se usan paréntesis, y la llamada se precede con un símbolo "&", así:

sub suma { ... }
&suma(3,4);

En la forma "moderna" (utilizable a partir de Perl 5) se puede declarar con paréntesis (e indicar el número de parámetros con símbolos "$") y llamar sin paréntesis:

sub suma ($) { ... }
suma(3,4);


Vamos a agrupar todo esto en un ejemplo:


# Función para saludar a varios, al antiguo estilo
sub saludo
{
print "Esto es un saludo para: ";
foreach $actual (@_) {
print $actual . " ";
}
print "\n";
}

# Función para elevar al cuadrado, al antiguo estilo
sub cuadrado {
my $numero = shift;
$numero **= 2;
return $numero;
}

# Función para sumar dos números, al modo moderno, 2 parámetros
sub suma($$)
{
return $_[0] + $_[1];
}


# Cuerpo del programa

# Primero llamamos a la función saludo, al antiguo estilo
&saludo("Nacho", "Juan");

#Luego, elevamos 3 al cuadrado
print "3 al cuadrado es : " . &cuadrado(3) ."\n";

#Finalmente, sumamos 4 y 6
print "4 + 6 = " . suma(4,6) ."\n";


El resultado de este programa sería

Esto es un saludo para: Nacho Juan
3 al cuadrado es : 9
4 + 6 = 10