Página 1 de 1

Evaluar una variable en Perl

NotaPublicado: 2012-07-19 10:14 @468
por Chascarrilla
¡Hola! :)

Estoy aprendiendo Perl y quiero saber si puedo evaluar una variable como se hace en Cobol. Ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using cobol Syntax Highlighting
  1. EVALUATE X
  2.    WHEN 0
  3.        CONDICION 1
  4.    WHEN 1
  5.        CONDICION 2
  6.    WHEN 2
  7.        CONDICION 3
  8.    WHEN OTHER
  9.        CONDICION 4
  10. END-EVALUATE;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Les agradezco si me pueden ayudar, este es el único medio por el cual estoy aprendiendo Perl.

Att: Chascarrilla

Re: Evaluar una variable en Perl

NotaPublicado: 2012-07-19 11:19 @513
por explorer
Bienvenido/a a los foros de Perl en Español, Chascarrilla.

En perlsyn tienes varias descripciones de cómo lo puedes hacer (secciones «BLOQUES básicos» e «Instrucciones Switch»).

Básicamente, desde Perl v5.10.0, se puede usar la característica añadida "switch";

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use feature "switch";
  2. use feature "say";
  3.  
  4. given ($x) {
  5.     when (0) {
  6.         say "Es 0";
  7.     }
  8.     when (1) {
  9.         say "Es 1";
  10.     }
  11.     when (2) {
  12.         say "Es 2";
  13.     }
  14.     default {
  15.         say "No lo sé";
  16.     }
  17. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Pero en las últimas semanas se está oyendo en la comunidad el quitar given/when (sigue siendo experimental), y hacerlo con un for() o foreach():

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use v5.10.1;
  2. for ($x) {
  3.     when (0) { say "Es 0"     }
  4.     when (1) { say "Es 1"     }
  5.     when (2) { say "Es 2"     }
  6.     default  { say "No lo sé" }
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

P.D. Naturalmente, también se puede hacer con una cascada de if/elsif/else)

Switch para Perl

NotaPublicado: 2012-07-20 10:30 @479
por MARKO
Sin exagerar, este aporte es oro, explorer :D

Una pregunta:

En el ejemplo para poder usar este tipo de estructura de switch pusiste
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use 5.10.1;
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

ya que desde esa versión es soportada la sintaxis en cuestión. Lo que saltó a mi atención fue que como yo tengo el ActivePerl 5.14.2 no puse la línea use 5.10.1; y me dio error por el "say" y todo lo demás.

Y entonces lo que hice fue usar use 5.14.2; y todo corrió de lo mejor.

Mi pregunta sería: cuando no pones el use 5.#.#; ¿En qué versión de Perl se corren los programas? Ya que yo tengo el 5.14.2 y no corrió correctamente.

¿Cuándo recomiendas usar el use 5.#.#?

Re: Evaluar una variable en Perl

NotaPublicado: 2012-07-20 15:50 @702
por explorer
Las nuevas "features" (características) que traen las nuevas versiones de Perl, por defecto, no están activadas. Hay que activarlas con use feature o con use v5.12 o con la opción -E desde la línea de comandos. Más información en perldoc feature.

Cuando no pones ninguna de estas opciones, el programa se ejecuta con la versión que sea la del intérprete perl, pero eso no implica que las "features" estén activadas. Hay que decirlo de forma explícita.

Siempre es recomendable poner el use v5.xx cuando nuestro programa va a usar alguna característica del lenguaje que requiere un número mínimo de versión del intérprete de Perl. Un ejemplo es el operador SmartMatch (~~, coincidencia inteligente), que está disponible desde Perl v5.10. Si lo usamos en un programa, y alguien lo ejecuta con un Perl más antiguo, no lo entenderá y saldrá un error, en esa línea. En cambio, si ponemos el use v5.10.1, le saldrá un aviso indicando que necesita un Perl más moderno para poder ejecutarlo.

Más información en la primera parte de perldoc -f use.

Cuidado, porque en Perl v5.16, esto cambia un poquito:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.            use 5.016;
  2.            # a partir de aquí, solo características de 5.16
  3.            use 5.014;
  4.            # a partir de aquí, solo características de 5.14 (y no 5.16)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Evaluar una variable en Perl

NotaPublicado: 2012-07-25 14:42 @654
por Chascarrilla
¡¡¡Hola!!!

Muchísimas gracias por la ayuda, ha sido genial.

Chascarrilla :wink: