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