if ( condition ) { ... } elsif ( other condition ) { ... } else { ... }
unless ($a < $b) { print "$a >= $b\n"; }que es equivalente a:
if ($a < $b) { } else { print "$a >= $b\n"; }Por supuesto, siempre cabe la posibilidad de negar la condición:
if (!($a < $b)) { print "$a >= $b\n"; }
Si no se quieren escribir las llaves se puede usar la notación sufija de la sentecia:
# la forma tradicional if ($zippy) { print "Yow!"; } # al estilo Perl print "Yow!" if $zippy;
Una expresión puede ir seguida de una sentencia de control que determina su evaluación. Por ejemplo:
print "$n < 0 \n" if $n < 0;
while ( condition ) { ... }
También se puede usar en sufijo;
print "LA LA LA\n" while 1; # loops forever
Se puede usar como en C:
for ($i = 0; $i <= $max; $i++) { ... }
O en estilo Perl:
lhp@europa:~/projects/perl/src/perltesting$ cat ./for.pl #!/usr/bin/perl -w use warnings; use strict; foreach my $i (1..5) { print "$i "; } print "\n"; print "$_ " foreach (1..5); print "\n"; for my $i (1..5) { print "$i "; } print "\n";Al ejecutarlo produce:
lhp@europa:~/projects/perl/src/perltesting$ ./for.pl 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
until
:
until ($j > $i) { $j *= 2; }que se ejecutará hasta que la condición pasa a ser cierta.
El comando next comienza la siguiente iteración del bucle:
LINE: while (<STDIN>) { next LINE if /^#/; # discard comments ... }
El comando last produce la salida del bucle:
LINE: while (<STDIN>) { last LINE if /^$/; # exit when done with header ... }
Use el módulo Switch (no es necesario en las versiones posteriores a la 5.10):
lhp@europa:~/projects/perl/src/perltesting$ cat switch.pl #!/usr/bin/perl -w use strict; use Perl6::Say; use Switch; my $val = <>; chomp($val); switch ($val) { case 1 { say "number 1" } case "a" { say "string a" } case [1..10,42] { say "number in list" } case /^\w+$/ { say "pattern" } else { say "previous case not true" } }Veamos algunas ejecuciones:
lhp@europa:~/projects/perl/src/perltesting$ ./switch.pl 5 number in list lhp@europa:~/projects/perl/src/perltesting$ ./switch.pl 12bc pattern lhp@europa:~/projects/perl/src/perltesting$ ./switch.pl .2. previous case not true