[Cascavel-pm] [Spam] Re: [Spam] Re: PrincipaisContribuidoresCascavelPM

Nilson Santos Figueiredo Junior acid06 em gmail.com
Segunda Maio 28 10:58:39 PDT 2007


On 5/28/07, André Garcia Carneiro <andre.garcia.carneir em terra.com.br> wrote:
> Mas não sei, tive a impressão, baseado no que me escreveram, que o problema mesmo está no modo como Perl vai
> alocar essas variáveis. Declará-las com o escopo menor possível torna mais 'fácil' a vida do compilador???? É
> isso o que querem dizer?

Isso é mais válido, em algumas situações, para compiladores de C. Pro
perl não faz tanta diferença assim. A questão de escopo é uma questão,
ahn, "filosófica".

Vamos supor que você vai iterar de 1 a 100. Você poderia escrever esse
código assim:

  my $i;
  for $i (1..100) {
    # processa
  }

No entanto, o recomendado é que você escreva algo assim:

  for my $i (1..100) {
    # processa
  }

Porque isso? Porque na primeira alternativa, depois que terminar a
execução do loop a variável $i ainda vai estar lá, definida e
funcionando. Em alguns casos é isso realmente que você quer (suponha
um "for" que executa um "last" e você quer saber em qual iteração ele
parou). Contudo, na maior parte das vezes, não é. E isso pode fazer
com que você fique tentado a depois reutilizá-la para alguma outra
coisa, "já que ela já está definida mesmo".

Ao utilizar da segunda maneira, a variável $i só estará definida
dentro do corpo do "for", limitando seu escopo. Quando terminar, ela
não existe mais.

A analogia disso com variáveis globais é, novamente, uma questão de escopo. ;-)

Se você tentar pensar no corpo do "for" como uma outra função e pensar
que funções são subprogramas, as coisas podem ficar mais fáceis de
serem visualizadas. No fundo, qualquer violação de escopo é a mesma
coisa de uma variável global, contudo com granularidade menor e,
portanto, mais fácil de ser justificada.

-Nilson Santos F. Jr.


Mais detalhes sobre a lista de discussão Cascavel-pm