Laços (Loops)
Laços, ou 'loops', são blocos que executam várias vezes. Costumam ser usados em ações repetitivas, manipulando estruturas de dados inteiras, etc.
For/Foreach
O laço Foreach
("para cada") costuma ser usado para varrer listas ou arrays.
Por exemplo:
foreach my $elemento (1, 2, 3, 4, 5) { say $elemento; }
Naturalmente, você também pode passar um array:
my @array = (1 .. 5); foreach my $elemento (@array) { say $elemento; }
Como você pode ver, criamos uma variável especial $elemento
que se transforma em cada um dos elementos do array, em cada iteração. Cuidado, pois ao mudar o valor de $elemento
você muda o valor original no array:
my @array = (1 .. 5); foreach my $elemento (@array) { $elemento *= 2; } foreach my $elemento (@array) { say $elemento; }
Exercício
Imprima apenas os valores pares entre 0
e 10
:
foreach my $element (...) { if (...) { ... } }
While
O While
("enquanto") é um laço mais avançado que executa enquanto a expressão avaliada for verdadeira.
my $i = 10; while ($i > 0) { say $i; $i = $i - 1; }
Assim que a expressão $i > 0
se tornar falsa, o laço para de rodar.
Exercício
Exiba apenas os valores ímpares entre 0
e 10
:
my $i = ; while ($i ...) { if (...) { ... } }
Saíndo do loop
Em muitos casos você quer terminar o loop sem ter que esperar até ele acabar de rodar. Você pode fazer isso usando a palavra-chave last
:
my $i = 0; while ($i < 100) { last if $i == 10; say $i; $i = $i + 1; }
Esse laço não vai iterar 100
vezes porque nós interrompemos ele quando o $i
vale 10
.