Neste exemplo um laço redo foi simplificado, colocado em uma subrotina e exibido via interface gráfica.
Design-time
#!/usr/bin/perl
use warnings;
use strict;
use Tkx;
my @a = (9,3,2,4,6,5,8,7,1);
my ($num, $pos);
Tkx::wm_title(".", "Redo loop");
Tkx::grid(Tkx::ttk__frame(".c"));
Tkx::grid(Tkx::ttk__label(".c.l0", -text => "Array: "), -row => 1, -column => 1);
Tkx::grid(Tkx::ttk__label(".c.l1", -text => "(@a)"), -row => 1, -column => 2);
Tkx::grid(Tkx::ttk__label(".c.l2", -text => "Procurar: "), -row => 2, -column => 1);
Tkx::grid(Tkx::ttk__entry(".c.e1", -textvariable => \$num), -row => 2, -column => 2);
Tkx::grid(Tkx::ttk__button(".c.b1", -text => "Executar", -command => sub {encontrar();}), -row => 3, -column => 2);
Tkx::grid(Tkx::ttk__label(".c.l3", -text => "Elemento: "), -row => 4, -column => 1);
Tkx::grid(Tkx::ttk__label(".c.l4", -textvariable => \$pos), -row => 4, -column => 2);
sub encontrar{
$pos = -1;
{
$pos++;
redo if $pos < scalar @a && $a[$pos] != int($num);
}
if($pos < scalar @a){
$pos;
}else{ $pos = "Fora do array";}
}
Tkx::MainLoop();
Runtime
Sintaxe
O bloco (entre as linhas 29 e 32) está simplificado, sem next e sem last, com suas duas condicionais em uma mesma instrução (linha 31). A primeira condicional verifica se a variável $pos tem um valor menor do que o tamanho do array. A segunda condicional compara o valor informado aos elementos do array.
Antes de retornar o valor de $pos, a subrotina (linhas 27-36) verifica este valor através da condicional if-else (linhas 33-35).
Observe as linhas em destaque (4, 9-25, 38) contendo as instruções que constroem a interface gráfica do usuário com a Tk toolkit.
Reflexão
Por que será que no Brasil uma parcela representativa dos evangélicos está associada à lavagem de dinheiro, a traficantes, a milicianos, a terroristas e à extrema-direita?