![]() |
No entiendo que hace esta línea! Que tal, soy novato en perl y no me había topado anteriormente con una sentencia como esta. Código: for (0..$#lineas)Me podrían explicar que es lo que hace? Saludos!! |
Re: No entiendo que hace esta línea! Está comprobando si $j es falso o verdadero. Y (AND) en ese caso, ejecuta la otra parte del and. O de otra forma: el and evalúa las dos partes de la expresión, pero primero mira la parte izquierda: si es falsa, no ejecuta la expresión de la derecha (porque no hace falta porque el resultado del and siempre será falso). La línea se puede reescribir como: Código: if ( $j ) { $salida .= $lineas[$_] } |
Re: No entiendo que hace esta línea! Ahhh, es un if pero expresado en forma diferente a lo normal. Según he llegado a ver, Perl tiene mucho este tipo de sentencias diferentes, como el mismo for (0..$#lineas) que es un for simplificado. O sea, si $j es verdadero, lo que trae $lineas se concatena a la variable $salida Muchas gracias amigo, mi idea inicial es que estaba evaluando ambas condiciones, que en realidad es lo que hace, pero como dices, evalúa la de la izquierda y si es verdadera entonces guarda en la variable, que sera verdadera tambien. Saludos!! |
Re: No entiendo que hace esta línea! Hummm... Digamos que hace lo siguiente: Tenemos un 'and', por lo que tenemos que ver si las dos expresiones de los lados son verdaderas. Eso implica evaluarlas. De la parte izquierda, la evalúa, y si es falsa, ni siquiera mira la derecha, porque ya sabemos entonces el resultado del 'and': falso. En cambio, si es verdadera la parte izquierda, ahora tiene que evaluar la parte derecha. Y fíjate que NO importa si la parte derecha es falsa o verdadera... lo que importa (para el programador que escribió esa línea) es que la parte derecha se EVALÚA (la expresión se va a EJECUTAR). Este tipo de construcciones está heredado de los programas escritos en shell, donde es frecuente encadenar sentencias solo si van ejecutando y el resultado va siendo correcto una tras otra. Ejemplo: cd /tmp && rm *.tmp La línea anterior (en shell) primero ejecuta la parte izquierda (ir al directorio temporal), y, si es cierta (es decir, EXISTE /tmp y hemos PODIDO entrar en él) entonces el 'and' del shell (&&) mira a ver la parte derecha (ejecuta el borrado de todos los ficheros temporales). Es decir, el 'and' encadena sentencias que queremos ejecutar solo si la sentencia anterior es verdadera. NO estamos mirando el valor lógico -booleano- de todo el 'and'. Solo nos interesa la ejecución consecutiva. En Perl, es clásico ver líneas como: open FICHERO, '<mifichero' or die "ERROR: no puedo leer mifichero: $!\n" Si el open() falla (falso) el 'or' está obligado a ejecutar el lado derecho, aunque eso signifique su muerte ('die'), pero nosotros queremos precisamente eso, que muera. |
| La zona horaria es GMT -6. Ahora son las 10:43. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.