[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