A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Linguagem Perl - Loops e Saltos

Qui

20

Nov

2008


20:47

(1 voto de 5.00) 


Loops são alças, mas não adianta querer dourar a pílula. Ninguém vai saber do que eu estou falando se eu quiser chamar um loop de alça smile

Neste tutorial você vai aprender como se criam diversos tipos de loops. Também vai tomar contato com os saltos condicionais (curioso, ainda não encontrei ninguém que tenha trocado o termo salto por jump).

Loops com while e until

Com a ajuda dos loops while da linguagem Perl pode-se repetir diretivas do programa enquanto a condição da loop for verdadeira. Com um loop until pode-se repetir diretivas do programa até que a condição do loop seja atendida. Exemplo 1:

#!/usr/bin/perl $i = 1; print "primeiro a raiz quadrada de 1 até 10...\n\n"; while($i <= 10) { print "A raiz quadrada de ", $i, " é", sqrt($i), "\n"; $i++; } $i = 1; print "e agora os quadrados de 1 até 10...\n\n"; until($i > 10) { print "O quadrado de ", $i, " é", $i * $i, "\n"; $i++; }

Exemplo 2:

#!/usr/bin/perl $ArqAccesso = "../../docs/access.log"; $Acessos = 0; $Sucessos = 0; open(ARQUIVO, "<".$ArqAccesso) || die "Arquivo não encontrado!\n"; { while() { if(/HTTP\/1.0" 200/) # procurar por 'HTTP/1.0" 200' que são acessos bem sucedidos { $Sucessos++; } $Acessos++; } } print "De ", $Acessos, " acessos, ", $Sucessos, " foram bem sucedidos\n";

Um loop while (como o do exemplo 1) é iniciado com a palavra while (while = enquanto). Seguem-se as diretivas, contidas entre chaves. Para se formular uma condição é fundamental que as regras dos operadores de comparação sejam observadas. O conteúdo do loop é repetido enquanto a condição do loop for verdadeira.

Um loop until (como na segunda parte do exemplo 1) inicia-se com a palavra until (until = até que). Trata-se de uma formulação lógica diferente da do loop while. O conteúdo do loop until é repetido até que a condição do loop seja verdadeira. Nos demais aspectos, as regras do loop until são as mesmas que as do loop while. Entretanto, observe cuidadosamente a formulação da condição lógica! No exemplo, a condição while($i <= 10) acaba tendo exatamente o mesmo efeito que until($i > 10).

O exemplo 2 mostra um caso de aplicação típico do loop while em Perl. Neste exemplo, um arquivo é lido linha por linha. Trata-se de um arquivo de log, do tipo que os servidores web produzem para controlar os acessos. Neste caso específico, não há a necessidade de se usar um operador relacional (de comparação) na formulação da condição do loop. O loop é automaticamente interrompido quando todas as linhas do arquivo tiverem sido lidas (complemente esse exemplo verificando o módulo Leitura e Escrita de Arquivos, como também as expressões regulares na pesquisa em cadeias de caracteres).

As diretivas no interior de um loop sempre devem estar contidas entre chaves, mesmo quando houver apenas uma única diretiva.

info Observação: Em loops com operadores condicionais na condição do loop, deve-se sempre garantir pelo menos uma possibilidade de saída após o processamento apropriado. Isto significa que todas as condições devem ser verificadas cuidadosamente e que, com certeza, exista pelo menos uma saída válida, seja qual for o caso. Loops em que determinada condição não tenha uma saída prevista podem entrar no chamado "loop infinito" e o programa ou o sistema "travam".

Para se evitar um "loop infinito" é necessário que exista algo que, a um momento qualquer, leve à saída da alça. Para esse fim, frequentemente são definidos os chamados "contadores" - como no exemplo 1 a escalar $i. Esta escalar recebe um valor inicial de 1, que é incrementado em 1 a cada passagem através da diretiva $i++;. Desta forma, quando atingir um determinado valor e atender a condição do loop, este é interrompido.

Uma outra possibilidade de controlar e interromper loops é oferecida pelos saltos condicionais.

Loops com do..while/until

Neste tipo de loop, ao invés de primeiramente avaliar a condição da alça para depois executar o código dependente da condição, primeiro o bloco de diretivas é executado para depois a condição ser avaliada. Este tipo de loop, em todos os casos e independentemente do tipo de condição, é executado pelo menos uma vez. O uso deste tipo de loop é interessante quando as variáveis utilizadas na condição dependem de um processamento anterior. Exemplo 1:

#!/usr/bin/perl $Nome = "João"; do { print $Nome, "\n"; $Nome = "Pedro"; } while($Nome ne "Pedro")

Exemplo 2:

#!/usr/bin/perl $Nome = "João"; do { print $Nome, "\n"; $Nome = "Pedro"; } until($Nome eq "Pedro")

Um loop deste tipo começa com a palavra chave do. O bloco de diretivas vem logo a seguir, como sempre, entre chaves { }. Após a chave de fechamento }, encontra-se a condição de execução da alça. A condição pode ser formulada com while (enquanto) ou com until (até que). As regras restantes são as mesmas das alças com while/until.

info Observação: Os loops com do..while/until também sempre precisam ter uma opção de saída para não entrarem num "loop infinito". Os dois exemplos acima apresentam o mesmo resultado, ou seja, mostram o nome "João". Os exemplos diferem apenas na formulação da condição de execução da alça. Se os operadores relacionais eq (igual) e ne (não igual) fossem trocados, os dois loops entrariam num "loop infinito".

Informações adicionais