[Cascavel-pm] Várias Variações de Variáveis...

Eden Cardim edencardim em gmail.com
Quarta Junho 20 13:12:40 PDT 2007


On 6/20/07, Alceu Rodrigues de Freitas Junior <glasswalk3r em hotmail.com> wrote:
> Seu exemplo é bem simples, talvez não seja o melhor para mostrar o que você
> precisa. Eu pensei, para esse caso, que você simplesmente poderia usar uma
> variável global.

Não é tão simples quanto parece, você chegou a executar?
A ordem de execução do exemplo do flávio vai ser a seguinte:

# compilação começa
my $a; # declarações de variável ocorrem em tempo de compilação
$a = $a + 1; # bloco BEGIN é executado em tempo de compilação

# execução começa
$a = 1;

resultado: $a vai conter o valor '1';

Acho que esse exemplo deixa mais claro o problema:
my $var = 1;
BEGIN {
    my $var = $var + 2
    print '$var do BEGIN: ' . $var;
}
print '$var: ' . $var;

no final das contas a $var de dentro do BEGIN vai conter 2, e a de
fora vai conter 1. Se usar uma variável global, elas vão pisotear umas
nas outras e produzir resultados errados. E isso que pode ter vários
outros blocos aninhados indefinidamente dentro do BEGIN, todos com
suas $vars individuais.
Tá certo que não são muitos casos de programas que vão precisar fazer
isso, mesmo assim, tem que funcionar.

-- 
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática


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