case en perl

Juan Jose Natera Abreu naterajj at telcel.net.ve
Tue Apr 24 19:28:11 CDT 2001


Hola,

> for ($c) {
>   /^a$/ and do { <codigo-para-a>; last; };
>   /^b$/ and do { <codigo-para-b>; last; };
>    ...
>   /^.$/ and do { <codigo-por-defecto>; last; };
> }

La cosa es asi, la primera linea es un for que evalua el 
valor de $c, obvio...

Al evaluar $c, la variable $_ toma el valor de esta, $_ es
una variable implicita para muchas operaciones, las que 
requieren un solo operando y la de busqueda de patrones 
(como en este caso cuando se hace un /^a$/) y otras
cosas mas... man perlvar

Entonces las lineas /algo/ and do {...} estan buscando 
una coincidencia de la variable $c a traves de $_.

La primera busca una cadena que empiece por 'a', termine 
por 'a' y tenga un solo caracter (i.e case 'a'), si eso es
cierto ejecuta el codigo del 'do' y luego se sale del 'for' 
gracias a la instruccion 'last;' que esta al final del 'do'.
Lo que significa que no sigue evaluando el valor de $c y 
termina el ciclo.

Si $c no es igual a 'a' entonces evalua la sieguiente opcion
y asi sucesivamente hasta ejecuta el codigo por defecto, 
el /^.$/ significa cualquier caracter y al ponerlo de ultimo
nos aseguramos que no haga match antes de tiempo, ¿no es 
muy complicado verdad?

La cosa es que se usan abreviaciones tipicas de perl que son
un poco confusas si no has visto/hecho un poco de codigo.

Otra cosa interesante es el 'and' entre el matching y el 'do'

Sirve para ejecutar codigo dependiendo de una condicion y se 
usa mucho, tambien el 'or', un ejemplo tipico es:

open (F,"$miarchivo") or die "no puse abrir el archivo $miarchivo\n";

En otras palabras abre el archivo tal y da un mensaje de error
si no puedes...

Saludos,

Juan José
------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list