5. OPERADORES, CONDICIONALES, BUCLES Y SUBRUTINAS

5.1. Operadores matemáticos.

+ Suma
- Resta
* Multiplicación
** Exponenciación
/ División (calcula cociente)
% División (calcula resto)

5.2. Asignación matemática.

+= Suma a la variable el valor que contiene más otro valor.
$var += 4 es igual que $var = $var + 4
-= Resta a la variable un valor al valor que contiene.
$var -= 4 es igual que $var = $var - 4
*= Multiplica a la variable el valor que contiene por otro valor.
$var *= 5 es igual que $var = $var * 4
**= Igual, pero con exponenciación.
/= Igual, pero con división.
%= Igual, pero con división (resto).

5.3. Operadores para cadenas.

. Concatena cadenas: "Feliz "."Navidad" = "Feliz Navidad"
.= $var = "hola "; $var.= " Perl"; $var = "Hola Perl"
x= Asigna una expresión un número de veces.
$var = "aahh!"; $var x=3; $var ="aahh!aahh!aahh!"

5.4. Operadores para comparar números.

> Mayor que
< Menor que
== Igual que
>= Mayor o igual que
<= Menor o igual que
!= Distinto que
<=> Devuelve -1 para izquierdo < derecho, 0 para iguales o 1
para izquierdo > derecho

5.5. Operadores booleanos.

&& AND
|| OR
! NOT

5.6. Operadores para comparar cadenas.

gt Mayor que
lt Menor que
eq Igual que
ge Mayor o igual que
le Menor o igual que
ne Distinto que
cmp Funciona igual que <=>

5.7. Salto: if-elsif-else.

Ejemplos:

print if ($a > 4);

if (condición) {
...si cumple condición ejecuta esta línea...;
...y también esta...;
}

if (condición) {
...si cumple condición ejecuta esta línea...;
...y también esta...;
} else {
...ejecuta si no cumple...;
}

if (condición_1) {
...ejecuta esta línea...;
} elsif (condición_2) {
...ejecuta esta línea si no cumple 1 y si 2...;
} else {
...ejecuta esta línea si no cumple 1 ni 2...;
}

5.8. Bucles: While() con last, next y (<>).

While (<STDIN>) Realiza el bucle mientrás estén entrando datos por STDIN.

While (<STDIN>) {
Print;
}

next Regresa al principio del bucle.
last Finaliza el bucle.

5.9. for().

Sintaxis: For($inicio; condición; paso) { instrucciones }.

Ejemplo:

For($inicio=1; $inicio <=10, $inicio++) { print $inicio }.

Dada la variable contador $inicio con 1 como valor inicial , se ejecutan una serie de instrucciones mientras se cumpla la condición ($inicio <=10) y cambiando el valor de $inicio en cada iteración (Incrementando $inicio en 1).

5.10. Funciones definidas por usuarios.

5.10.1. Creación de funciones.

Los usuarios de Perl disponen de muchas funciones como substr(), funciones que ya las proporciona el propio lenguaje, no obstante, es posible crear funciones propias que resuelvan determinadas tareas que no sean resueltas por las funciones existentes. Los nombres de las funciones de los usuarios se identifican rápidamente porque como primer carácter llevan el símbolo de ampersand (&).

El uso de funciones evita la redundancia en el código, de ahí que sea muy recomendable su uso. Además, el código de una función está aislado del flujo del programa, es decir, el flujo del programa pasa por alto los trozos de código de las funciones de los usuarios que sólo son ejecutadas cuando son llamadas. Esto también supone que pueden escribirse en cualquier parte de los programa, aunque normalmente suelen situarse al final de los mismos y ordenadas según algún criterio, por ejemplo alfabéticamente.

El formato de una función es el siguiente:

Sub NombreFunción {
...código...;
...código...;
[return VariableOExpresión]
}

5.10.2. Variables globales y locales. Return implicado.

Las variables de Perl son variables globales, es decir, si definimos una variable con un valor determinado y a continuación llamamos a una función donde se usa la variable, el valor sigue siendo el mismo. Y si dentro de la función la variable cambia de valor, al finalizar la ejecución de dicha función y al regresar para seguir el flujo del programa si de nuevo accedieramos otra vez a la variable el valor contenido será último dado.

La instrucción return devuelve el valor de la variable o expresión indicada a continuación. Return es opcional porque en Perl existe el return implicado, esto significa que si return es omitido la última asignación realizada dentro de la función será el valor devuelto de return.

Dentro de una función también podemos definir variables locales, es decir, variables que sólo mantienen su valor dentro de la función. Su existencia es compatible con otra variable con el mismo nombre fuera de la función cada una con sus valores y con vidas separadas. Para definir variables locales se usa la sentencia local seguida de las variables entre paréntesis y separadas por comas y deben definirse a continuación del nombre de la función. Así:

Sub NombreFunción {
local ($Variable1, $Variable2...)
...código...;
[return VariableOExpresión] }

A una función se le pueden pasar valores escribiéndolos entre paréntesis y separados por comas a continuación de la llamada a la misma.

Ejemplo:

&AreaTriangulo($base, $altura);

Dentro de una función con parámetros existe la matriz especial @_ que almacena los valores recibidos en la función siendo su primer elemento $_[0], el segundo $_[1] y así sucesivamente.

Una biblioteca o librería es un conjunto de funciones creadas por un programador de Perl. El acceso a un función que está en una bibliotecas se hace con la función require("nombrebiblioteca.pl"). El uso de bibliotecas de funciones evita a los programadores la reescritura de éstas y facilita la distribución de funciones de distintos propósitos.

Ejemplo (funcion1.pl):

# La expresión de $cadena se invierte con la función invertir.

$cadena = "La casa de la pradera es una serie de tv muy chachi";
print &invertir, "\n";

$cadena = "0123456789";
print &invertir, "\n";

# Ejemplo de función pasándole dos parámetros.

print &bdias("Federico","+"),"\n";
print &bdias("Federico"," "),"\n";
print &bdias("Federico","_"),"\n";

# Ejemplo de uso de una matriz de parámetros.

$base = 10;
$altura = 5;
print &areatriangulo($base, $altura), "\n";

require("libperl.pl");

$lado = 3;
print &areacuadrado($lado), "\n";

sub invertir{
$contador = length($cadena);
$inversa = "";
while ($contador >= 0){
$inversa.= substr($cadena, $contador, 1);
$contador--;
}
return $inversa;
}

sub bdias{
local ($saludo);
$saludo = "¡ "."Hola ".$_[0]." !";
$_ = $saludo;
s/ /$_[1]/g;
return $_;
}

sub areatriangulo{
($lbase, $laltura) = @_; # Lee los parámetros pasados a la función
$areatriangulo = $lbase * $laltura / 2;
}

Ejemplo de librería de funciones (libperl.pl):

#Libreria de funciones.

#Primera función

sub areacuadrado{
$areacuadrado = $_[0] ** 2;
return $areacuadrado;
}

#Segunda función...

#Tercera función...

1; #El valor 1 indica que la instalación de la biblioteca tiene éxito.
#Es el return de la función require().