[Cascavel-pm] Várias Variações de Variáveis...
Flavio S. Glock
fglock em gmail.com
Quarta Junho 20 14:28:35 PDT 2007
Em 20/06/07, Alceu Rodrigues de Freitas
Junior<glasswalk3r em hotmail.com> escreveu:
>
> Para seu exemplo, isso poderia ser feito facilmente usando usando "local" e
> mantendo o valor original. Eu sugeri o uso de uma variável global apenas se
> fosse necessário guardar o resultado calculado dentro do bloco BEGIN. Para o
> caso de apenas imprimir o valor, nem isso é necessário.
Faz sentido, mas o problema é mesmo um pouco mais complicado:
Não precisamos nem trocar de exemplo.
Vamos ver o programa do ponto de vista do compilador.
Imagine uma sequencia de chamadas de subrotinas:
abre_bloco;
declara_var_lexica( '$x' );
atribui( '$x', 1 );
# ...
fecha_bloco;
Para executar uma sequência de comandos assim, você não consegue usar
'local' dentro das subrotinas.
Porque o 'local' retorna ao valor anterior no fim do bloco.
Isso quer dizer que, ao executar a próxima instrução, o valor de $x
não existiria mais.
Uma possibilidade seria fazer um eval() neste código:
{
local $My::x;
atribui( '$x', 1 );
# ...
}
mas isso não é possível, porque o programa precisa necessariamente ser
lido e executado passo-a-passo.
Quer dizer, você só sabe o próximo comando depois que já executou o anterior.
Não pode usar { } porque você precisaria colocar todos os comandos
dentro, mas você ainda não sabe os comandos.
certo?
Mais detalhes sobre a lista de discussão Cascavel-pm