Condiciones en Perl
SOLUCIONARIO
Condiciones en Perl
2024-10-04
Por
Occam's Razor

#!/usr/bin/perl
$n= 42;

print "Adivina en que número estoy pensando ? ";
$v = <>;
die "Solo números positivos" if $v < 0;

if ($v == $n) {
    print "Bien Hecho!\n";
}
else {
    print "Sigue Probando!.\n";
    print "El número es " . (($v < $n) ? "MAYOR" : "MENOR") . "\n";

    # Si hemos fallado añadimos una pista
    print "Pista : ";
    $h = abs ($v - $n);
    if    ($h < 5)  {print " TE QUEMAS!!!\n"} # ; opcional en este caso
    elsif ($h < 10) {print " CALIENTE\n";}
    elsif ($h < 15) {print " TEMPLADO\n";}
    else            {print " FRIO\n";}
}

Perl, desde el punto de vista de las condiciones, es idéntico a C, con la única excepción de que Perl nos obliga a utilizar siempre las llaves, incluso si las llaves contienen una sola instrucción. En ese caso, el terminador de línea ; que es opcional y lo podemos omitir. En nuestro código de ejemplo podríamos haber escrito:

if ($v == $n) {
    print "Bien Hecho!\n"
}

Al igual que en C, en Perl es obligatorio utilizar los paréntesis alrededor de las condiciones cuando utilizamos la forma if-elsif-else.

SABÍAS QUE…

Los caracteres <> se conocen como el operador diamante, por la forma que tiene. Se utiliza para leer líneas de la entrada estándar. En realidad se utiliza para leer datos de cualquier descriptor de fichero, pero cuando no especificamos ninguno entre los signos < y > simplemente lee de la entrada estándar.

Es posible omitir las llaves en las expresiones if cuando solo queremos ejecutar una instrucción. A diferencia de C, en este caso, la condición va al final de la instrucción precedida de if, y en ese caso no es necesario utilizar los paréntesis en la condición, aunque no pasa nada si los ponemos.

die "Solo números positivos" if $v < 0;

SOY NOVATO

La instrucción die (Muere en inglés) termina el programa mostrando el mensaje que pasamos como parámetro.

Perl no ofrece una instrucción switch como parte del lenguaje, si bien existe un paquete que extiende el lenguaje con una versión del comando switch. Sin embargo, Perl nos ofrece un operador ternario que funciona exactamente igual que su equivalente C (de hecho son idénticos).

En el programa de ejemplo hemos utilizado la función abs para calcular nuestro valor intermedio, pero podríamos implementar la misma funcionalidad con el operador ternario:

$h = ($v > $n) ? $v - $n : $n - $v;

Como podéis comprobar Perl, al igual que otros lenguajes que veremos a continuación, ofrece una construcción especial para el caso en el que sea necesario añadir una nueva condición al bloque else. Esta construcción el nombre elsif en Perl. Podéis ver como utilizarla en el programa de ejemplo para generar la pista.

Perl permite definir tres tipos de variables: escalares, arrays y hashes. Perl diferencia estos variables anteponiendo un símbolo distinto al nombre de cada variable dependiendo de su tipo. Así las variables escalares (las que solo pueden contener un valor) se marcan con el símbolo $. Los arrays o matrices con @ y las tablas hash con #.

SOY NOVATO

Perl no diferencia, en principio, entre tipos de datos. El valor almacenado en una variable Perl se utilizará de la forma más conveniente (número, cadena de caracteres,…) según el contexto.

Si bien es posible imprimir cadenas usando cadenas de formato como en C, y en ocasiones resulta útil, Perl, al igual que la mayoría de lenguajes de Script nos permiten imprimir valores de forma mucho más sencilla. Podemos construir la cadena a imprimir utilizando el operador . o de concatenación, el cual permite … bueno… concatenar cadenas. La siguiente línea muestra como usamos ese operador para construir el mensaje a imprimir.

print "El número es " . (($v < $n) ? "MAYOR" : "MENOR") . "\n";

Pero Perl también nos permite imprimir variables directamente incluyéndolas dentro de la cadena, es lo que se conoce como Interpolación de Cadenas/ariables y es una funcionalidad presente en muchos otros lenguajes de programación.

El código anterior lo podríamos haber escrito de esta forma:

$pista = ($v < $n) ? "MAYOR" : "MENOR";
print "El número es $pista\n";

Como podéis ver simplemente usamos la variable dentro de la cadena para imprimirla. Para que esto funcione la cadena tiene que estar definida con comillas dobles. Las comillas simples también se pueden usar para definir una cadena en Perl, pero en ese caso la cadena se imprimirá tal cual está escrita.

Perl no permite definir constantes de forma nativa, si bien hay distintos paquete que nos permiten incluir esta función en nuestros programas. Los más comunes son constant y readonly los cuales se pueden usar de la siguiente forma:

use Readonly;
Readonly $V = 42;

use contant V => 42;

Observad que cuando utilizamos constant no indicamos el tipo de variable y Perl sustituirá las ocurrencias de ese valor en tiempo de compilación (lo cual ocurre justo antes de ejecutar nuestro script). Por esa razón, no es posible hacer interpolación de cadenas con constantes constant:

use constant V => 42;
print "El valor es V";    # Imprime "El valor es V"
print "El valor es " , V; # Imprime "El valor es 42"

SABÍAS QUE…?*

Existen módulos Perl para casi cualquier cosa, incluyendo también la definición de constantes, si bien los dos formas que os hemos comentado son los más típica. Por ejemplo, el paquete Const::Fast funciona igual que constant pero permite interpolación de cadenas.

En general, la forma más sencilla de trabajar con constantes es asumir una determinada nomenclatura. Suele ser habitual utilizar letras mayúsculas para los nombre de las constantes. De esta forma, cualquier variables cuyo identificador esté en mayúsculas es interpretada como una constante por el programador y no va a intentar asignar valores a ella.

Resumen

  • Soporta if ... [elsif] ...[else] ...
  • Soporta forma reducida Comando if (cond);
  • Soporta operador terciario (cond) ? valor_Verdad : Valor_Falso
  • No soporta booleanos: ==0 -> FALSO y !=0 VERDADERO
  • No soporta switch
  • No soporta constantes nativamente (modulos contant y readonly )

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)