Todos estos bloques pueden, obviamente, reagruparse:

 

# if ejecuta el test de una condición y actúa en consecuencia en función de la verdad o no de ésta.

 

La sintaxis es:

 

if (condición) {

cosas;

que;

hacer;

} elsif (condición2) {

otras;

cosas;

que;

hacer;

} else {

otro;

todavía;

}

 

Este ejemplo habla por sí solo: el perl hace un test de la primera condición, y si ésta es verdadera ejecuta el bloque. Si es falsa, pasa a elsif y examina la segunda condición: si es verdadera, ejecuta el bloque. Si ninguna de las precedentes es verdadera, pasa al else.

 

Un ejemplo ulterior:

 

print “Elige un número\n”;

$num=<STDIN>;

if ($num == ‘0’) {

print “Has presionado 0\n”;

} elsif ($num == ‘1’) {

print “Has presionado uno\n”;

} elsif ($número == ‘2’) {

print “Has presionado dos\n”;

} elsif ($num == ‘3’) {

print “Has presionado tres\n”;

} else {

print “No has presionado ni cero ni uno ni dos ni tres!\n”;

}

 

Está claro, ¿no? Hemos elegido poner un ejemplo tan largo para demostrar que puede haber perfectamente más de un elsif: aquí hay tres, y habrían podido ser muchos más, sin un techo máximo; sin embargo sólo puede haber un else y un if, siempre que no estén concatenados:

 

if (condición) {

if (condición2) {

haz esto;

}

haz esto otro;

}

El ejemplo anterior funciona, pero es totalmente distinto del precedente: éste se lee como ” si sucede cierta cosa (condición) y si sucede otra (condición2) …..”, no es una serie de alternativas como el ejemplo de los tres elsif.

No es necesario introducir un elsif() o un else(); la estructura también puede ser simple como:

 

if (condición) {

cosas_que_hacer;

}

 

o bien:

 

if (condición) {

cosas_que_hacer;

} else {

otras_cosas;

}

 

Las {} son siempre necesarias en estas construcciones. Un modo para sintetizar al máximo el ejemplo:

 

if (condición) {

cosas_que_hacer;

}

 

es

 

cosas_que_hacer if condición;

 

Ejemplo:

 

if ($cmd eq ‘ECHO’) {

&print($args);

} elsif ($cmd eq ‘CLEAR’ || $cmd eq ‘CL) {

print $cls if $ansi;

print “`#ssfe#l\n” if $ssfe;

}

# unless hace las mismas cosas que if, sólo que invierte el resultado del test.

 

print “No es uno\n” unless $number ==1;

 

# while Repite un loop hasta que una condición es verdadera. Un ejemplo puede ser:

 

#!/usr/local/bin/perl

print STDERR “nombre del file: “;

$nombre_del_file = <STDIN>;

open(FILE, “< $nombre_del_file”);

while (!eof(FILE)) {

$raya = <FILE>;

print “$raya”;

}

Este script no hace otra cosa que pedirnos el nombre del file que hay que abrir y, mientras no llegue al final (la condición ‘while(!eof(FILE)’), lo muestra en la pantalla.

 

until Repite un loop mientras una condición sea falsa.

 

La sintaxis es:

 

until (condición) { # se puede sustituir con while por tener la

# condición opuesta

cosas;

que;

hacer;

 

} Esta construcción hace un test de la condición, y si es verdadera ejecuta todo lo que está contenido en {}, después ejecuta un nuevo test sobre la condición, etc., mientras la condición siga siendo falsa.

 

Dentro del bloque, puede haber otros 2 comandos útiles:

 

# next skippa el resto del bloque y va directamente a volver a hacer un test de la condición.

 

# last skippa el resto del bloque y sale:

 

$i = 0;

while ($i < 18) {

print “$i “;

$i++;

}

print “\n”;

 

$i = 0;

while ($i < 18) {

next if $i == 4;

print “$i “;

$i++;

}

print “\n”;

 

También aquí se puede usar la sintaxis.

 

haz_algo while condición

 

# foreach Ejecuta determinadas operaciones sobre cada valor de cada lista/array.

La sintaxis es:

 

foreach $variable (array o escalar) {

haz_algo;

haz_cualquier otra cosa;

}

 

Como siempre, $variable no es indispensable y, si ésta no se especifica, se utilizará $_ Los argumentos entre () pueden ser un array, más array o una lista de variables, o llamadas de funciones que restituyen valores, o una mezcla de todo esto.

 

Todos estos escalares y array son enviados a un array (como haz push() ), después de lo cual viene ejecutado el bloque entre {} para cada valor.

 

Cuidado: si el código entre {} modifica el valor de una variable, también en el array el valor será modificado.

 

Como con while/until, también con foreach se puede utilizar last y next.

 

@bla = (“ick”, 3, “arr”, “bleargh”);

%eek = (10, “no”, 5, “yes”, 7.5, “maybe”);

 

foreach (@bla, keys(%eek), “heh”) {

print “|”, $_, “| “;

}

print “\n”; # Muestra

# “|ick| |3| |arr| |bleargh| |10| |5| |7.5| |heh|”

 

foreach (@bla, keys(%eek), “heh”) {

$_ = “bla” if $_ == 3;

}

print join(“:”, @bla).”\n”; # Muestra “ick:3:arr:bleargh”

 

foreach $i (@bla) {

$i = “bleh” if $i == 3;

}

print join(“:”, @bla).”\n”; # Muestra “ick:bleh:arr:bleargh”

 

# for Puede utilizarse como sinónimo de foreach, sólo que la sintaxis resulta más clara:

 

for (statement1; condición, statement2) {

cosas;

que;

hacer;

}

 

for ($i = 0; $i < 18; $i++) {

print “$i “;

}

print “\n”;

 

for ($i = 0; $i < 18; $i++) {

next if $i == 4;

print “$i “;

}

print “\n”;

 

Después de haber hablado de los bloques, puede resultar útil introducir el concepto de “control” sobre los file. Por ejemplo, si se tiene un script del tipo:

 

#!/usr/bin/perl

print “Inserta el nombre del file que quieres modificar\n”;

chomp($file=<STDIN>);

…..

 

Es probable que el ususario indique el file correctamente y que el script proceda con éxito; ¿pero y si no es así? ¿Qué pasaría si el usuario insertase como nombre del file “halo” invece di “hola”? Simplemente el script editaría un nuevo file (vacío), ¡que no es el que queríamos! Semejante inconveniente se puede superar del siguiente modo:

 

#!/usr/bin/perl

print “Inserta el nombre del file que quieres modificar\n”;

chomp($file=<STDIN>);

if (-e $file) {

….

} else {

die “File no encontrado\n”;

}

 

¿Qué hay de diferente a lo de antes? Aparte el bloque if/else, fijaos en ese “if (-e $file)”: traduciéndolo al español podría ser “si existe $file”. Por tanto, el intérprete perl primero irá a ver si dicho file existe, y si es así, procederá a su modificación. Si no existiese, se bloquearía y mostraría un mensaje (no se ha encontrado el file).

Obviamente hay otros operadores además de “-e” ; veamos los más importantes:

 

-z el file tiene dimensiones nulas

 

-s el file tiene dimensiones no nulas (restituye las dimensiones

 

-f el file es un file regular

 

-d el file es un directorio

 

-l el file es un link

 

-r el file es legible

 

-w el file es escribible

 

-x es file es ejecutable

 

-T el file es un file de texto

 

-B el file es un file binario (opposto di -B)

 

Sinteticemos todo con un ejemplo:

 

#!/usr/bin/perl

print “Inserta el nombre del file\n”;

chomp($file=<STDIN>);

print “Legible\n” if -r $file;

print “Escribible\n” if -w $file;

print “Ejecutable\n” if -x $file;

print “El file tiene dimensiones nulas\n” if -z $file;

print “Es un directorio\n” if -d $file;

print “Es un link\n” if -l $file;

Compare: compara código desde Notepad Notepad++ la aplicación libre para la edición de código fuente con soporte para múltiples lenguajes de programación permite ampliar su funcionalidad o...
Las mejores herramientas online para CSS Interesante colección de generadores web con los que mejorar nuestro trabajo con CSS. Es innegable el hecho que las hojas de estilo en cascada o CS...
Anonymous no atacará Facebook Anonymous no piensa echar abajo Facebook la semana que viene, como se había hablado en los últimos días. El grupo así lo ha asegurado mediante algunos...
El 75% de las empresas utilizan software libre El uso del software libre parece ser cada vez más una elección tomada por las empresas españolas, de las que, según la Encuesta de Uso de las TIC y Co...
¿ Que es AJAX ? AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas ...
Antivirus Gratuitos Versus Antivirus de Pago, cual elegir? Hasta hace poco creíamos que solo los antivirus de pago eran la panacea para resolver nuestros problemas, pero parece que muchos paquetes se han queda...
Adobe compra tecnología de cine a Iridas Adobe ha anunciado la compra de Iridas sin desvelar los detalles financieros del acuerdo. El software de vídeo de Adobe, Premiere Pro y After Effects,...
Proceso de creación del software Se define como Proceso al conjunto ordenado de pasos a seguir para llegar a la solución de un problema u obtención de un producto, en este caso partic...
Agua de mar el combustible del futuro Los científicos estadounidenses confirman que el agua salada del mar se puede utilizar como combustible para propulsar micromotores. Un equipo de cien...
Tienda Online para ropa, calzados, bisutería, cinturones Generalidades Nombre del Proyecto: Tienda Online par ropa, calzados, bisutería, cinturones Descripcion Desarrollo de Tienda Online Plataforma...